2017-05-15 4 views
1
counter=$(grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' > $2 | wc -l); 

echo $counter; #Output is 0? 

카운터의 값은 wc -l의 출력이어야합니다. 왜 내가 0 인 걸까요? 나는 zsh을 사용하고 있습니다. 명령을 직접 실행하면 문제가 발생하지 않습니다. wc과 뭔가 관계가 있지만 뭔가를 인쇄하지만 다른 것을 돌려 주겠습니까? 이 작업을 올바르게 수행하려면 어떻게해야합니까?bash pipe에서 명령을 평가했지만 반환 값이 잘못되었습니다.


내가하고있는 일은 무엇입니까?

grep을 사용하여 줄 번호를 인쇄하고 sed를 사용합니다. 줄의 내용을 제거하고 wc를 사용합니다. 출력의 줄 수를 계산합니다.


편집 :

내 속셈이 파일을 분할하는 것입니다

직접 쉘 fdgs


숨은 동기에. 그렇게하기 위해 일부 줄 번호를 식별하고 있습니다. grep을 사용하여 특정 텍스트를 찾고 있습니다 (그림에서 보듯이 SET SCHEMA입니다). 줄의 내용이 줄 번호가되기를 원하지 않기 때문에 시작과 끝을 구분하여 줄을 잘라냅니다. wc -l을 사용하면 라인 수를 세고 있습니다.

+0

파일로'sed'의 출력을 리디렉션하고, : 당신이 tee 명령을 사용할 수 있습니다 그렇게하십시오. –

+0

왜 내가 bash에서 이것을 직접 실행했을 때 대답을 얻을 수 있습니까? –

+0

무엇을 의미합니까? 리디렉션을 제거하라는 메시지가 표시됩니다. 'counter = $ (grep -n'ABC '$ 1 | sed'/ : [a-zA-Z0-9] *; // '| wc -l);'('sed' 명령의'> $ 2 '를 제거하십시오). –

답변

2

당신은 파이프와 직접 동시에 파일에 모두 출력을 리디렉션 할 수 없습니다 계산 인쇄를 --lines . 그래서`wc` 항상 0 선을 계산합니다

... | sed 's/:[a-zA-Z0-9 ]*;//' | tee "$2" | ... 
+0

리디렉션이 터미널에서 직접 작동 한 이유를 이해할 수 없습니까? –

+0

명령을 리디렉션하는 경우 (티 없음) 출력이 표시되지 않아야합니다. – user000001

+0

편집을 확인하십시오. 나는 대답으로 20을 얻었습니다 –

1

시도 :

counter=$(grep -n 'ABC' $1 | sed 's/:[a-zA-Z0-9 ]*;//' | wc -l); 

echo $counter; #Output is 0? 

무엇 나오지 명령에 도달 할 수 있습니까?

당신은이를 사용할 수 있습니다

counter=$(grep -n 'ABC' $1 | wc -l); 

이 명령을

1:ABC 3:ABC 

는 이제 'ABC'의 발생을 계산합니다 :

grep -n 'ABC' $1 

다음과 같은 출력을 얻을. 이 경우 2, 그렇지?

간단한 grep을 사용하여 작업을 수행합니까, 아니면 잘못 되었습니까?

grep -n 'ABC' $1 | wc -l 

wc는 맨 :

-l은 줄 바꿈이

+0

보시다시피, 저는 sed 명령을 사용하여 줄 번호를 파일로 인쇄합니다. –

+0

결과가 정확히 무엇인지 알려주실 수 있습니까? 나는 너를 도우려고 노력할 것이다. –

+0

질문을 수정 중입니다. wait –

관련 문제