使用sed用另一行替换文件中的行?

时间:2011-11-09 19:23:21

标签: bash sed

这是我想要的工作:

我在配置文件中有以下行

subscribed_pages[]=WikiPage.ChildPage.*

我想走一堆文件并替换以subscribed_pages[]=开头的那一行,无论该行的其余部分是什么,我都希望它看起来像。

subscribed_pages[]=*

我试图用一个文件执行此操作并收到以下错误。

sed 's/subscribed_pages[]=.*/subscribed_pages[]=\*/' -i  1288079906.93.57631
sed: -e expression #1, char 46: unterminated `s' command

2 个答案:

答案 0 :(得分:6)

您需要在搜索模式中将[]转换为\[\]

$ echo 'subscribed_pages[]=WikiPage.ChildPage.*' \
    | sed -e 's/subscribed_pages\[\]=.*/subscribed_pages[]=\*/'
subscribed_pages[]=*

答案 1 :(得分:2)

除了转义括号外,您还可以避免在替换部分中再次输入匹配项:

sed -r 's/(subscribed_pages\[\]=).*/\1\*/'

\ 1到\ 9引用第n个带括号的字符串(正则表达式中的“组”)