文字列の前後のスペースを削除し、ファイル内の文字列を単一のスペースに置き換えます。

文字列の前後のスペースを削除し、ファイル内の文字列を単一のスペースに置き換えます。

bashスクリプトの一部としてfile1.txtから文字列を削除しようとしています。

たとえば、このファイルには次のものが含まれます。

@some_group1 = take.me bake.shake test.test push.pull
@some_group2 = test.test take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull test.test

私が望む出力は次のとおりです。

@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull

sedコマンドを試してみましたが、正常に動作しませんでした。

sed -i 's/\[?]\$username\[?]\/  /g' file1.txt

これを行うための最良の方法は何ですか?

答え1

sed解決策:

username="test.test"
sed "s/ *$username */ /" file

出力:

@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull 

答え2

一重引用符を使用して変数名を挿入するには、次のようにします。

sed 's/ '"$username"'//' file1.txt

あまりきれいではありませんが、時には便利かもしれません。一重引用符または二重引用符を直接使用しても、コードに潜在的な問題があります。変数に「/」が含まれている場合、sedはそれを「s」コマンドの一部として扱います。つまり、4つのスラッシュがあり、次の構文エラーが発生します。

sed: bla bla bla: unknown option to `s'   #good luck debugging that :)

この問題を解決するために、私は通常私の変数に現れる可能性が最も低い他の構文区切り文字を選択します。たとえば、新しいコマンドは次のようになります。

sed 's# '"$username"'##' file1.txt

関連情報