sed 명령이 쉘 스크립트 내의 패턴을 대체하지 않는 이유는 무엇입니까?

sed 명령이 쉘 스크립트 내의 패턴을 대체하지 않는 이유는 무엇입니까?

여러 개의 연결된 sed 명령을 포함하는 쉘 스크립트를 준비하려고 합니다.

저는 FreeBSD 12를 사용하고 있습니다 /bin/sh. 이는 POSIX와 호환되는 것으로 보입니다(man 페이지 참조).여기).

내가 시도한 내용은 다음과 같습니다. 해당 동작이 예상되지 않는 것이 분명합니다.

$ cat testfile.txt 
<TEST>

$ cat test.sh 
#!/bin/sh

while read line
do
        sed 's/<TEST>/FOO/' 
done <&0
$ cat testfile.txt | ./test.sh 

$ cat testfile.txt | sed 's/<TEST>/FOO/'
FOO

$ 

나는 여기에 기본적인 것을 놓치고 있다고 생각합니다.

답변1

누구세요읽다좋아요, 하지만 당신이 읽은 내용으로는 아무 것도 할 수 없습니다. 노력하다:

#!/bin/sh

while read line
do
        printf '%s\n' "$line" | sed 's/<TEST>/FOO/'
done <&0

while read line다음 으로 변경할 수도 있습니다.

while IFS= read -r line || [ -n "$line" ]

모든 내용을 의도한 대로 읽었는지 확인하세요 cat testfile.txt | sed 's/<TEST>/FOO/'. 바라보다

답변2

어쨌든, 당신이할 수 있는셸에서 복잡한 스크립트를 작성할 때는 대화형 사용보다는 스크립팅용으로 설계된 언어를 사용하는 것이 좋습니다. 몇 줄의 코드보다 더 복잡한 작업을 수행할 때 Python, Perl 또는 Raku가 가장 먼저 떠오릅니다. Python은 거의 모든 곳에서 인기가 있고 사용할 수 있습니다. Raku도 Perl의 진화/완전한 재설계이며 그다지 인기가 없습니다(아직?).

관련 정보