tcsh 스크립트 - grep 결과에서 줄바꿈을 유지합니다.

tcsh 스크립트 - grep 결과에서 줄바꿈을 유지합니다.

나는 텍스트 파일에서 일부 패턴을 파악하기 위해 tcsh로 간단한 스크립트(분명히 나쁜 생각이지만 좋은 생각)를 작성하고 있습니다. 다음을 포함하는 파일이 있다고 가정해 보겠습니다 animal_names.txt.

dog carrot
dog bolt
cat larry
cat brownies
bird parry
bird pirate

나는 스크립트를 작성했습니다 :

set animals = "dog\|cat"
set names = `grep $animals animal_names.txt`
echo "$names"

목적은 "dog" 또는 "cat"으로 모든 줄을 파악하는 것입니다. 그러나 내가 얻는 출력은 단 한 줄입니다.

dog carrot dog bolt cat larry cat brownies

어떻게 든 출력에서 ​​개행 문자가 제거됩니다. 줄 바꿈을 보존하는 방법이 있습니까? 다른우편 엽서:q 수정자를 사용하는 것이 좋지만 내 경우에는 작동하지 않았습니다.

답변1

"내가 얻는 출력은 단 한 줄입니다." - 불행하게도 당신은 스크립팅 문제의 원인 중 하나에 직면했습니다 [t]csh. 개행 문자를 보존하는 것은 불가능하거나기이한. 대신 bash( 또는 )를 사용하세요 sh.

이것이 파일에 기록된다고 가정합니다 find_animals.

#!/bin/sh
animals='dog|cat'
names=$(grep -E "$animals" animal_names.txt)
echo "$names"

RE 기호를 이스케이프하지 않고 |대신 grepERE(확장 정규식)를 사용하라는 지시를 받았습니다. 그대로 놔둬도 되지만 이렇게 읽는 것이 더 쉽다고 생각합니다.

스크립트를 실행 가능하게 만들기

chmod a+x find_animals

animal_names.txt파일이 있는 디렉토리에서 실행하세요.

./find_animals

산출

dog carrot
dog bolt
cat larry
cat brownies

이것을 사용하려고 하면 tcsh다음과 같이 작동합니다.

#!/usr/bin/tcsh -f
set animals = 'dog|cat'
set temp = "`grep -E '$animals' animal_names.txt`"
set names = ""
set nl = '\
'
foreach i ( $temp:q )
    set names = $names:q$i:r:q$nl:q
end
set names = $names:r:q
echo $names:q

인용하다

관련 정보