我希望在 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