如何在文本周围添加括号

如何在文本周围添加括号

如何使用 sed 替换文本并附加到相关匹配的行尾?

我有一个 sed 文件正在执行许多替换。

其中之一更改~=match(使用/=\~/ s/=\~/match( /

执行此操作时,我还想)在相关行的末尾添加一个“”(空格+结束括号)(满足原始匹配项)

我用这个 sed 行尝试了这个:

/=\~/ s/=\~/match(/ s/$/ )/

但我得到了我们最喜欢的sed: -e expression #1, char 77: unknown option tos'`
(第 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.

相关内容