sed 替换包含空格通配符的行

sed 替换包含空格通配符的行

我的文件有 1500 行,我想更改行号 1449 我知道我可以使用下面的命令

sed -i '1449s/"'$' == $rdn{ strlen($rdn) - 1 })"/'$' == $rdn[ strlen($rdn) - 1 ])/' file_name

但它不起作用。我想更换

'$' == $rdn{ strlen($rdn) - 1 })  

'$' == $rdn[ strlen($rdn) - 1 ])

任何人都知道如何用 sed 中指定行号来替换它,请指导。

答案1

你的问题不是行号sed,也不是引用:你不能在单引号内嵌套双引号,所以'1449s/"'有匹配的单引号,因此你的脚本以1449s/"$ ==等等开头。

如果没有 ,您的模式可能是唯一的'$',因此您只能使用单引号:

sed -i '1449s/ == $rdn{ strlen($rdn) - 1 })/ == $rdn[ strlen($rdn) - 1 ])/' file_name

或者您将整个内容放在双引号内,但需要$从 shell 中转义:

sed -i "1449s/'\$' == \$rdn{ strlen(\$rdn) - 1 })/'\$' == \$rdn[ strlen(\$rdn) - 1 ])/" file_name

或者最后,如果该行不包含任何{}除了要替换的行之外,您可以使用以下y命令:

sed -i '1449y/{}/[]/' file_name

答案2

sed  -i -e "1449s/})$/])/g" -e "1449s/{ strlen/[ strlen/g" filename

输出

'$' == $rdn[ strlen($rdn) - 1 ])

相关内容