回答:
あなたは、GNUは、標準入力からスクリプトを読み込むためにsedを伝えることができ-f -
、-f
ファイルからスクリプトを読み取ることを意味し、および-
コマンドの多くの一般的であるように、標準入力を意味します。
sed -f - "$IN" > "$OUT" << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT
POSIX sedもサポート-f
しますが-
、標準入力でのの使用は文書化されていません。この場合、/dev/stdin
Linuxシステムで使用できます(Solarisにもこの機能があることを思い出しているようですが、現時点では確認できません)。
使用して<<-SED_SCRIPT
(「 - 」で接頭辞)はクロージングできるようになりますSED_SCRIPT
タグがインデントされます。
場合はsed
、スクリプトの読み込みをサポートしていませんstdin
(使用-f -
)は、使用することができますプロセス置換(利用可能でをbash
、zsh
、ksh93
):
sed "$IN" > "$OUT" -f <( cat << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT)
右括弧)
は、終了区切り文字(SEC_SCRIPT
)の直後または改行の後に続く必要があります。プロセス置換の場合echo
、ヒアドキュメントの代わりに使用することもできます。
sed "$IN" > "$OUT" -f <( echo \
" s/a/1/g
s/test/full/g" )
"$IN"
またはtestfile.txt
)が気に入らなかった— -e script
またはが必要-f file
でした。@paboukの回答を並べ替えるとうまくいきました:sed -f <( cat << ETC ... ETC) "$IN" > "$OUT"
SED_SCRIPT
でした。
多分より良いアプローチ:
OUT=/dev/stdout
IN=my_in_file.txt
sed -s 's/in/out/' < $IN > $OUT
-or-
sed -s 's/in/out/' > $OUT < $IN
IN=my_in_text
sed -s 's/in/out/' <<< $IN > $OUT
-or-
sed -s 's/in/out/' > $OUT <<< $IN
:)