構成ファイル内のboots
という名前のパッケージのすべての参照を置き換えようとしています。
行の形式はadd fast (package OR pkg) boots-(any-other-text)
です。例:
add fast package boots-2.3
add fast pkg boots-4.5
置き換えたい:
add fast pkg boots-5.0
次のsed
コマンドを試しました。
sed -e 's/add fast (pkg\|package) boots-.*/add yinst pkg boots-5.0/g'
sed -e 's/add fast [pkg\|package] boots-.*/add yinst pkg boots-5.0/g'
正しい正規表現は何ですか?ブール値または(package
またはpkg
)部分に何か不足していると思います。
sed -e 's/add fast \(pkg\|package\) boots-.*/add yinst pkg boots-5.0/g'
ORを2回実行することで、常に回避できます。
sed 's/add fast pkg boots-.*/add yinst pkg boots-5.0/g
s/add fast package boots-.*/add yinst pkg boots-5.0/g'
拡張正規表現モードを使用し、|
をエスケープしないでください。
sed -E -e 's/add fast (pkg|package) boots-.*/add yinst pkg boots-5.0/g'
BREとEREのどちらかを混在させている場合は、両方をエスケープします()
および|
またはなし。
sedはデフォルトで基本正規表現を使用します。拡張正規表現の使用を有効にするかどうかは実装に依存します。 BSD sedでは-E
スイッチ、GNU sedは-r
、 だが -E
も機能します。
GNU(Linux):
1)次のランダムな文字列を作成します
cidr="192.168.1.12"
cidr="192.168.1.12/32"
cidr="192.168.1.12,8.8.8.8"
空白にする
2)-rでsedし、GNUで@Thorと同じように論理演算子を使用し、-iを実行して、一致したファイルをその場で編集する
$ echo '<user id="1000" cidr="192.168.1.12">' > /tmp/1000.xml
$ sed -r -i \
s/'cidr="192.168.1.12\/32"|cidr="192.168.1.12"|192.168.1.12,'/''/ /tmp/1000.xml
-r = GNU sed
-i = search / match/ edit the changes to the file on the fly