実施例1

実施例1

result.txt表示するためのサンプルテキストファイルがあります。

{HEX}.A.Bs
{HEX}.A.Bss
{HEX}.A.Bsss
{HEX}.A.Bssss

ただし、実際のアプリケーションでは、コンテンツにresult.txt次の文字を1行ずつ含めることができます。

/usr/local/abc.txt
/var/tmp/
png
OIPOP()_+(_)&*#)@IOJDNU*@Utest

Bashスクリプトのパラメータを介して1行の文字列を削除したいと思います。したがって、私のbashスクリプトにはtest.sh次のコードがあります。

!/bin/sh
#test.sh
result=result.txt
del="$1"
sed -i "/$del/d" $result
cat result.txt

実施例1

したがって、削除するには、"{HEX}.A.Bs"パラメータを使用して次のスクリプトを実行します。

./test.sh "{HEX}.A.Bs"

"{HEX}.A.Bs"これにより、insideという文字列が削除されます。result.txt しかし、中にあるすべては result.txt 削除されました。予想される出力は次のようになります。

{HEX}.A.Bss
{HEX}.A.Bsss
{HEX}.A.Bssss

実施例2

削除したい場合"{HEX}.A.Bss"

./test.sh "{HEX}.A.Bss"

上記の例文字列を1つだけ残す "{HEX}.A.Bs" ~へ result.txt。文字列のみを削除する必要があります"{HEX}.A.Bss"。したがって、予想される結果は次のとおりです。実施例2次の結果を生成する必要があります。

{HEX}.A.Bs
{HEX}.A.Bsss
{HEX}.A.Bssss

ここでコードにどのような問題があるのか​​わかりますか?

ベストアンサー1

文字列に一致する行を削除するには、内部編集用のGNU awk(GNU sedと同じ)などのリテラル文字列を理解するツールを使用します。

del="$1" awk -i inplace '($0"") != ENVIRON["del"]' "$result"

おすすめ記事