web-dev-qa-db-ja.com

sedにファイルからスクリプトを読み込ませる方法は?

最近、次のgrepコマンドに遭遇しました:

/usr/xpg4/bin/grep -Ff grep.txt input.txt > output.txt

これは、私の理解によれば、input.txtから、grep.txtに含まれている問題をgrepして、output.txtに出力することを意味します。

Sedについても同様のことをしたい、つまりsedコマンドを別のファイル(たとえばsed.txt)に保持し、それらを入力ファイル(たとえばinput.txt)に適用して出力ファイル(たとえばoutput.txt)を作成したい)。

私は以下を試しました:

/usr/xpg4/bin/sed -f sed.txt input.txt > output.txt

これは機能せず、次のエラーが発生します。

sed: command garbled

上記のファイルの内容は次のとおりです。

sed.txt

sed s/234/acn/ input.txt
sed s/78gt/hit/ input.txt

input.txt

234GH
5234BTW
89er
678tfg
234
234YT
tfg456
wert
78gt
gh23444
23
sachin

きみの sed.txtにはsedコマンドのみを含める必要があります。sedの接頭辞や入力ファイルの接尾辞は使用できません。あなたの場合、それはおそらく次のようになります:

# sed.txt
s/234/acn/
s/78gt/hit/

入力で実行した場合:

$ /usr/xpg4/bin/sed -f sed.txt input.txt
 acnGH 
 5acnBTW 
 89er 
 678tfg 
 acn 
 acnYT 
 tfg456 
 wert 
ヒット
 ghacn44 
39
schot

Sedコマンドを個別のテキストファイルに保存するのではなく、sedスクリプトを作成してみてください。以下のファイルは、データファイルで直接実行できます。

./myscript.sed inputfile.txt> outputfile.txt

#!/bin/sed -f
s/234/acn/
s/78gt/hit/
20
Kevin