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은 널리 사용되며 거의 모든 곳에서 사용할 수 있습니다. Perl도 마찬가지입니다. Raku는 Perl의 진화/완전한 재설계이지만 그다지 인기가 없습니다(아직?).

관련 정보