帮助组合 sed 命令(语法)

帮助组合 sed 命令(语法)

我有一个包含很多行的文件,就像这样

, foo = $true
, foo = $false
foo = $true, <--- single space after comma
foo = $false, <-- single space after comma

要替换这些字符串我可以做

#!/bin/bash

sed -i 's/, foo = $true/bar/g' file
sed -i 's/, foo = $false/bar/g' file
sed -i 's/foo = $true, /bar/g' file
sed -i 's/foo = $false, /bar/g' file

或者,把它们拴起来,这同样糟糕

sed -i -e 's/, foo = $true/bar/g' -e 's/, foo = $false/bar/g' -e 's/foo = $true, /bar/g' ... file

但是有没有办法使用单个 sed 命令来执行所有迭代?

sed -i 's/[,\ ].*foo = [$false\|$true][,\ ]/bar/g' file

答案1

sed -Ei 's/,{,1} {,1}foo = \$(true|false),{,1} {,1}/bar/g' file
sed -Ei 's/(, ){,1}foo = \$(true|false)(, ){,1}/bar/g' file

-Eflag 激活扩展正则表达式,允许使用(){}|元字符而无需转义。

  • (, ){,1}匹配 0(隐含)到 1 次出现,

  • \$(true|false)匹配$true$false.


请记住

sed -i -e 's/, foo = $true/bar/g' -e 's/, foo = $false/bar/g' -e 's/foo = $true, /bar/g' ... file

是一个 sed 命令,但具有各种脚本(每个-e标志一个)。

相关内容