2017-03-08 4 views
1

나는 많은 파일을 가지고있다. 나는 키워드를 grep하고 여러 가지 파일의 일부를 반환하는 XPath 표현식을 수행하는 xmllint에 키워드가 들어있는 파일 이름을 전달합니다.grep/xargs의 결과를 별도의 줄로 가져 오기

grep -irl "keyword" . | xargs xmllint --xpath '/HTML/BODY/P[2]' 

키워드가있는 파일이 여러 개있어 다양한 xmllint 실행 결과가 여러 개 있습니다. 각 xpath의 결과를 다른 라인에서보고 싶습니다. 그러나 그들은 모두 같은 선상에 합병되었습니다.

팁이 있습니까?

답변

1

한 번에 확인 만 file is passed to xargs`를 만들기 위해 xargs-n1를 사용할 수 있습니다

grep -irl "keyword" . | xargs -n 1 xmllint --xpath '/HTML/BODY/P[2]' 

당신은 그 과정을 대체와 while 루프 사용 xargs의 출력을보다 세밀하게 제어하려면 :

while read -r file; do 
    echo "Processing $file =>" 
    xmllint --xpath '/HTML/BODY/P[2]' "$file 
    echo "===========================" 
done < <(grep -irl "keyword" .) 
+0

-n 1은 echo와 같은 것으로 작동합니다. grep -irl "키워드". | xargs -n 1 에코하지만 xmlints의 출력을 새 줄로 이동하지 않습니다 –

+0

어쨌든 원하는 출력을 제어하기 위해 내 while 루프 기반 솔루션을 사용할 수 있습니다. – anubhava

1

한 빠른 해결책은 이것에 대한 루프를 위해 사용하는 것입니다

for file in `grep irl "keyword" .`; do 
    xmllint --xpath '/HTML/BODY/P[2]' $file; 
    echo; 
done 

---- 편집 ---- 내가 xmllint가 출력되지 줄 바꿈을한다는 것을 이전 코멘트에서 믿고있어

. 루프의 본문에 에코를 추가하여 문제를 해결해야합니다.