Sedを使用してファイルを一度に1ステップずつ編集する方法を知っていますが、実際のsedスクリプトを作成し、それをファイルで使用して、個々のsedコマンドと同じことを行うにはどうすればよいですか?たとえば、次の3つのsedコマンド:
sed -i '4i \' baconFile
sed -i 's /、/\t\t /' baconFile
sed -i 's /、/ /' baconFile
これらの行をscript.sed
という名前のスクリプトファイルに入れます。
4i\
s/,/\t\t/
s/,/ /
次に、次のように実行します。
$ sed -i -f script.sed baconFile
単一の実行可能ファイルにしたい場合は、次のようにします。
#/bin/bash
sed -i '
4i\
s/,/\t\t/
s/,/ /
' "$@"
上記の行をscript.bash
というファイルに入れ、実行可能にします(chmod +x script.bash
、次のように実行します。
$ script.bash baconFile
この方法を使用して、前述のファイルを作成できます。
$ cat > script.bash <<EOF
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
EOF
これにより、スクリプトファイルが作成されます。次のコマンドを使用して確認できます。
$ cat script.bash
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
sed -i '4i\
s/,/\t\t/
s/,/ /' baconFile
sedはほとんどのインタープリターと同様に機能し、複数のコマンドを別々の行に記述したり、;
で区切ったりできます。 GNU sed
がない場合、最初の行でエラーが発生する可能性があります。
Sedスクリプトを作成するには、シバンでsedインタープリターへの絶対パスを指定するだけです。そして、ファイルが実行可能であることを確認してください。
#!/bin/sed -f
s/foo/bar/
chmod u+x foo
./foo <<<foo
bar
または、sedコマンドとともにスクリプトを呼び出すこともできます。 sed -i -f foo file
-f
オプションsed -f sed-script
が必要です
これを行うには、bashまたはkornシェルスクリプトを記述できます。動的にしたい場合は、ファイル名をパラメーターとして取り、必要なファイルでこれらのsedコマンドを実行できるように動的にすることができます。
新しいファイルを作成します。たとえば、updatefile.sh
#!/bin/bash
#$1 is the first parameter being passed when calling the script. The variable filename will be used to refer to this.
filename=$1
sed '4i\ ' filename
sed 's/,/\t\t/' filename
sed 's/,/ /' filename
その後、updatefile.sh baconFile
は、ファイルbaconFile
に対して3つのsedコマンドをすべて実行します。
また、sedのg
オプションは、ファイル内の変数のすべての出現を更新します。例えば:
sed 's/,/ /g' filename