$ echo "${BASH_VERSION}" 5.1.4(1)-release
Linux 5.18.0-17.1-liquorix-amd64 x86_64 GNU/Linux
文字列があり、export LIBVIRT_DEFAULT_URI='qemu:///system'
ユーザーの文字列から行全体を見つけて削除したいと思います~/.profile
。私は良い方法を知らない。 sedまたはawkの一般的な使用はエラーで失敗し、残念ながら私は問題を解決する方法を推測するにはあまりにも愚かすぎるか、または怠惰です(またはその両方)。
どこに$1
ファイル名があり、$2
検索する文字列があります。以下は一般的に機能しますが、場合によっては失敗するようです。
これはうまくいきません:awk "!/$2/" "$1" > "$1".tmp && mv "$1".tmp "1"
これもうまくいきません:sed -i "/$2/d" $1
これもうまくいきません: awk -vLine="$2" "!index($0,$2)" file
すべての提案および/または指示に感謝します。必ずしも必要な場合でなければPerlを使いたくないのですが、この時点では効果のある苦い薬を服用します。ありがとうございます。
答え1
#! /bin/sh -
if [ "$#" -ge 2 ]; then
export LINE="${1?}"
shift
perl -ni -e 'print unless index($_, $ENV{LINE}) >= 0' -- "$@"
fi
次のように使用してください。
that-script "export LIBVIRT_DEFAULT_URI='qemu:///system'" file1 file2...
export LIBVIRT_DEFAULT_URI='qemu:///system'
from を含む行を削除するにはfile1
、file2...
index($_, $ENV{LINE}) >= 0
オプションの先行スペースまたは末尾スペースで構成される行をm{^\s*\Q$ENV{LINE}\E\s*$}
一致させるために使用できます。export LIBVIRT_DEFAULT_URI='qemu:///system'