web-dev-qa-db-ja.com

どのように正確にsedスクリプトを作成し、それを使用してファイルを編集しますか?

Sedを使用してファイルを一度に1ステップずつ編集する方法を知っていますが、実際のsedスクリプトを作成し、それをファイルで使用して、個々のsedコマンドと同じことを行うにはどうすればよいですか?たとえば、次の3つのsedコマンド:

sed -i '4i \' baconFile

sed -i 's /、/\t\t /' baconFile

sed -i 's /、/ /' baconFile

18
John

コマンドをファイルに入れる

これらの行をscript.sedという名前のスクリプトファイルに入れます。

4i\ 
s/,/\t\t/
s/,/ /

次に、次のように実行します。

$ sed -i -f script.sed baconFile

スタンドアロンのsedスクリプトを作成する

単一の実行可能ファイルにしたい場合は、次のようにします。

#/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/,/ /
22
slm
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

3
llua

-fオプションsed -f sed-scriptが必要です

2
loki

これを行うには、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
2
mousumis