ファイルの引用符を置き換えるsedスクリプトをどのように作成できますか? [コピー]

ファイルの引用符を置き換えるsedスクリプトをどのように作成できますか? [コピー]

したがって、データファイルでは、次の2つのコマンドを連続して手動で使用します。つまり、最初のコマンドがファイルの更新を完了した後、2番目のコマンドをトリガーします。

sed -i 's/""""/" " /g' EXPERIMENT-20210729010003.FILE
sed -i 's/"""/" " /g' EXPERIMENT-20210729010003.FILE

これを .sh スクリプトに作成し、ファイル名を sh 呼び出しにパラメータとして渡すにはどうすればよいですか?

EXPERIMENT-*.FILEが私のUnixサーバーに毎日表示されます。特定の時点で名前に一意の日付/時刻値を追加した実験ファイルは1つしかありません。

ありがとうございます!

ベストアンサー1

sed2つの別々のコマンドを1つにまとめることができます。

sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' file

でも、

sed -i 's/"\{3,4\}/" " /g' file

(しかし""""交換中だから今後 """;逆の順序で置換を実行すると、最後のコマンドは同じではありません)。

これをシェルスクリプトに置き換えることができます。

#!/bin/sh

sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"

...またはシェル関数(~.bashrc例:ファイル)で、

call_sed () {
    sed -i -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"
}

コマンドは--コマンドラインオプションの処理を停止し、ダッシュで始まるファイル名にスクリプトまたは関数を使用できるようにします。"$@"与えられたスクリプトまたは関数に拡張されるファイル名のリストで、それぞれ個別に引用されます。

次のスクリプトまたは関数を使用できます。

$ call_sed EXPERIMENT-*.FILE

このような単一のコマンドを使用するとsedエイリアスにすることもできますが、引用に注意する必要があります。シェル関数を使用することをお勧めします。

alias call_sed='sed -i -e "s/\"\"\"\"/\" \" /g" -e "s/\"\"\"/\" \" /g" --'

-iこのオプション(常に使用したくない場合があります)をスクリプトにオプションにするには、次の手順を実行します。

#!/bin/sh

unset in_place

if [ "$1" = "-i" ]; then
    in_place=true
    shift
fi

sed ${in_place:+-i} -e 's/""""/" " /g' -e 's/"""/" " /g' -- "$@"

空でない場合は、${in_place:+-i}次に展開されます。スクリプトに指定された最初の引数がある場合、この変数はnullではありません。-i$in_place-i

シェル関数がオプションを使用するように、コードのシェル関数バリアントにも同じ変更を加えることができます-i

おすすめ記事