2011-02-19 2 views
1

grep 모든 라인을 파일의 시작부터 문자열을 담고있는 라인으로 보낸다.

statementes 
asda 
rertte 
something 
nothing here 

을 포함하는 입력 파일을 가지고 있다면 grep/extract (awk를 사용하지 않고)에서 모든 줄을 시작하여 문자열 "something"을 얻을 때까지 추출합니다. 어떻게해야합니까? grep -B는 정확한 줄 수를 필요로하기 때문에 작동하지 않습니다.

원하는 출력 :

statementes 
asda 
rertte 
something 

답변

2

완전히 강력한 아니지만, 확실히 -B는 ... 그냥 -B 거대한 계산하게 작동합니다

grep -B `wc -l <filename>` -e 'something' <filename> 
+1

을 어떻게 할 명령 출력을 매개 변수에 전달하십시오. xargs? 'grep -B'에 전달 된'wc -l'보다 더 나은 점은'grep -n something | cut -d : -f1' 그리고'head -n'에 넘겨주세요. – jmilloy

+0

맞습니다. 이것은 전혀 견고하지 못합니다. 많은 경우에 쓰레기를 내뿜습니다. – SkypeMeSM

+0

@skype : 도와주세요, 어떤 경우? – jmilloy

0

당신은 떠들썩한 파티를 사용할 수 while 루프와 당신이 문자열 쳤을 때 출구 초기 :

$ cat file | while read line; do 
> echo $line 
> if echo $line | grep -q something; then 
> exit 0 
> fi 
> done 
0
head -n `grep -n -e 'something' <filename> | cut -d: -f1` <filename> 
관련 문제