使用 ' 登录 Ubuntu 的 sed 正则表达式



我希望在 ubuntu 中使用sed来替换文件file.txt中的一行。

我的行以某种模式开头foo后跟任意数量的任意字符。我希望用foo='x'替换它。我试图从 bash 使用以下命令:

sed -i 's/^foo*/foo='x'/g' file.txt

显然,'符号制动了转移到sed的字符串。此外,当我删除有问题的符号时,正则表达式对我不起作用。我只是只替换模式foo而不是整行。

例如原始file.txt

foo='bla'

请求的结果file.txt

foo='SomethingElse'

我尝试了许多变量,例如:sed -i 's/^foo*/foo='x'/g' file.txt无济于事。我无法在网上找到有关该主题的信息,尽管我确信这不是第一次有人遇到此问题。

如何在目标中使用'(或我正在搜索的模式)? 这种方法中的正则表达式是怎么回事?

使用 sed

sed "/foo/s/='.*'/='1234'/g" file
foo='1234'

此搜索foo,然后将='替换为该行上的='1234

当您'int 文本时,将 sed 的开始和停止更改为"

使用反向引用和-E的另一种变体

sed -E "s/(foo=').*/11234'/g" file
foo='1234'

如果你喜欢使用单引号,你必须用单引号退出sed,然后转义单引号,然后一个新的单引号进入sed,就像这个混乱的解决方案:

sed '/foo/s/='''.*/='''1234'''/g' file

或十六进制代码:

sed '/foo/s/=x27.*x27/=x271234x27/g' file

最新更新