2012-11-15 4 views
20

한 파일에서 grep하고 매치마다 명령을 실행하는 방법은 무엇입니까?명령을 grep하고 실행하는 방법 (매치마다)

파일 :

내가 foo에 모든 경기를 예를 date에 대한 실행 실행하려는
foo 
bar 
42 
foo 
bar 

.

시도가 작동하지 않습니다 다음은

grep file foo | date %s.%N 

어떻게 그렇게? 추가 판독 가능 스크립트에서

답변

24
grep file foo | while read line ; do echo "$line" | date %s.%N ; done 

: 각 입력 라인

grep file foo | while read line 
do 
    echo "$line" | date %s.%N 
done 

, read 변수 $line에 값을 넣어, 상기 whiledodone 사이 루프 본문을 실행할 것이다. 값이 stdin이 아닌 변수에 있기 때문에 echo을 사용하여 stdin으로 다시 푸시므로, date %s.%N "$line"을 수행하면됩니다.

for 항상 공간에 휴식이 파일의 목록을 읽어 악몽이되기 때문에, 유사하다 for line in `grep file foo`를 사용하지 마십시오 :

find . -iname "*blah*.dat" | while read filename; do .... 

for와 함께 실패합니다.

+0

없음 문제에서 전체 Windows 경로에 일치하는 변환 http://en.wikipedia.org/wiki/Xargs

grep file foo | xargs date %s.%N 

예. grep이 파일에서 여러 패턴을 읽을 수있는 기능 (-f) 또는 stdin에서 명령을 생성하는 xargs의 기능을 포함하여 대부분의 대량 작업을위한 유닉스 도구가 있습니다. –

+0

점검이되지 수 : 그렙 foo는 파일 ------- NAME 그렙, egrep을, fgrep, rgrep - 패턴 사용법 그렙 [옵션] PATTERN [FILE 일치하는 인쇄 라인 .. .] – Xofo

+0

어떻게 스크립트를 실행할 수 있습니까? grep file foo | while read line do echo "$ line"| 날짜 % s. % N 완료 파일을 넣어야합니까? –

7

정말 필요한 것은 xargs 명령입니다. 일부 파일을 일치하고 Cygwin에서 환경

$ find $(pwd) -type f -exec ls -1 {} \; | grep '\(_en\|_es\|_zh\)\.\(path\)$' | xargs cygpath -w 
0
grep command_string file | sh - 
+0

안녕하세요 @ 제임스, 안녕하세요. 오신 것을 환영합니다. 답변을 개선하고 upvoted가 될 가능성이 더 높아지는 설명을 추가하는 것이 좋습니다. –

관련 문제