여러 개의 연결된 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의 진화/완전한 재설계이지만 그다지 인기가 없습니다(아직?).