如何使用 sed 替换文本并附加到相关匹配的行尾?
我有一个 sed 文件正在执行许多替换。
其中之一更改~=
为match(
使用/=\~/ s/=\~/match( /
执行此操作时,我还想)
在相关行的末尾添加一个“”(空格+结束括号)(满足原始匹配项)
我用这个 sed 行尝试了这个:
/=\~/ s/=\~/match(/ s/$/ )/
但我得到了我们最喜欢的sed: -e expression #1, char 77: unknown option to
s'`
(第 77 行,因为这个 sed 还有很多其他东西(省略))。
如何)
为这些行添加 a ?我可以在这场比赛中做到这一点吗?或者我需要另外一条线吗?我希望它仅适用于这些匹配,否则我可能最终会)
为“现有”match()
表达式添加额外的内容。
fwiw 完整的 sed 是..
sed -i 's/\.should/)\.to/
/\.to ==/s/==/eq/
/=\~/ s/=\~/match(/ s/$/ )/ <--- line in question
/[^}.to|end.to]\.to[[:space:]]/ s/\(\S\)/expect(\1/
/[^}.to|end.to]\.to_not[[:space:]]/ s/\(\S\)/expect(\1/
s/[^}.to|end.to].to[[:space:]]/).to /
s/to_receive/to receive/
s/to_not_receive/to_not receive/' ../_spec_seded/"$file"
答案1
尝试这个:
sed -r "s/=~(.*)$/match(\1)/" <filename>
另外,您收到的错误是因为 sed 解释/=\~/
为应执行操作的行的过滤器、s/=\~/match(/
操作和s/$/ )/
操作的标志,在这种情况下,您需要使用一个组并将表达式与一条新线:
sed -re "/=\~/ {
s/=\~/match(/
s/$/ )/
}" <filename>
{}
这是有关命令块的相关文档info sed
`{ COMMANDS }'
A group of commands may be enclosed between `{' and `}' characters.
This is particularly useful when you want a group of commands to
be triggered by a single address (or address-range) match.