sed - 如何替换第一个单词并保留缩进?

时间:2013-11-06 15:50:39

标签: sed

对于.to的所有行,我想在开头添加expect(

例如

blob.to 20
leave me
  Thing.to(30)
Other.to {all}
  leave me tooo
        far_in.to stuff

我想看看:

expect(blob.to 20
leave me
  expect(Thing.to(30)
expect(Other.to {all}
  leave me tooo
        expect(far_in.to stuff

目前我有:

sed -i '/.to/s/^[[:space]]*/expect(/' ../_spec_seded/"$file"

但我正在获得sed: -e expression #1, char 28: unterminated s'命令 从它

如何解决我尚未看到的错误,并在进行此类替换时“保留”空格。

如果你能排除有}。而不是[除了'}'之外的任何字符的行

,那么可以获得奖励。

n.b。我处理单独关闭parens。

P.S。 unix网站现在下来。

2 个答案:

答案 0 :(得分:4)

您的前导空格消失因为您选择不保留那些。你可以说:

sed '/.to/ s/^\([[:space:]]*\)/\1expect(/' filename

或者,您可以说:

sed '/\.to/ s/\(\S\)/expect(\1/' filename

对于您的输入,结果是:

expect(blob.to 20
leave me
  expect(Thing.to(30)
expect(Other.to {all}
  leave me tooo
        expect(far_in.to stuff

  

如果您可以排除有.to而不是。的行,则可以获得奖励   [除了'}'之外的任何字符。]到

如果我理解正确,你想说:

sed '/[^}]\.to/ s/\(\S\)/expect(\1/' filename

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed 's/\S\+\.to/expect(&/' file