sed正则表达式中的布尔OR

Ada*_*tan 17 regex sed logical-operators

我正在尝试替换boots配置文件中命名的包的所有引用.

行格式是add fast (package OR pkg) boots-(any-other-text),例如:

add fast package boots-2.3
add fast pkg boots-4.5
Run Code Online (Sandbox Code Playgroud)

我想用以下代替:

add fast pkg boots-5.0
Run Code Online (Sandbox Code Playgroud)

我尝试了以下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'
Run Code Online (Sandbox Code Playgroud)

什么是正确的正则表达式?我想我在布尔或(packagepkg)部分缺少一些东西.

bob*_*ogo 23

sed -e 's/add fast \(pkg\|package\) boots-.*/add yinst pkg boots-5.0/g'
Run Code Online (Sandbox Code Playgroud)

您可以通过两次执行来避免OR

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'
Run Code Online (Sandbox Code Playgroud)

  • 最好在“两次”命令中使用半冒号。像这样:`sed's / \。ism / \。ism \ .md5 / g; s / \。usp / \。usp \ .md5 / g'/ tmp / verify` (2认同)

Spe*_*bun 17

使用扩展的正则表达式模式,不要逃避|.

sed -E -e 's/add fast (pkg|package) boots-.*/add yinst pkg boots-5.0/g'
Run Code Online (Sandbox Code Playgroud)

  • `sed:无效选项 -- E`。似乎不适用于 Red Hat 上的“GNU sed version 4.1.5”。 (2认同)
  • @AdamMatan啊,使用`-r`标志表示GNU sed,正如Thor指出的那样. (2认同)

Tho*_*hor 6

你混合BRE和ERE都要么逃避(),|要么都没有.

sed默认使用基本正则表达式,允许使用扩展正则表达式是依赖于实现的,例如使用BSD sed你使用-E开关,GNU sed将其记录为-r,但-E也可以.