我的文件有 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 ])