web-dev-qa-db-ja.com

ブールOR sed regex

構成ファイル内の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)部分に何か不足していると思います。

17
Adam Matan
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'
24
bobbogo

拡張正規表現モードを使用し、|をエスケープしないでください。

sed -E -e 's/add fast (pkg|package) boots-.*/add yinst pkg boots-5.0/g'
17
Spencer Rathbun

BREとEREのどちらかを混在させている場合は、両方をエスケープします()および|またはなし。

sedはデフォルトで基本正規表現を使用します。拡張正規表現の使用を有効にするかどうかは実装に依存します。 BSD sedでは-Eスイッチ、GNU sedは-r、 だが -Eも機能します。

6
Thor

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
0
user285594