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/'。バラより

おすすめ記事