나는 텍스트 파일에서 일부 패턴을 파악하기 위해 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 기호를 이스케이프하지 않고 |
대신 grep
ERE(확장 정규식)를 사용하라는 지시를 받았습니다. 그대로 놔둬도 되지만 이렇게 읽는 것이 더 쉽다고 생각합니다.
스크립트를 실행 가능하게 만들기
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
인용하다