查找和替换复杂字符串

时间:2015-10-07 09:53:39

标签: shell replace sed

我有一个包含

之类的句子的输入文件
typedef void * __builtin_va_list;

我想用

替换它
typedef void ** __builtin_va_list;

我尝试使用sed如下

sed 's/void * __builtin_va_list/void ** __builtin_va_list/g' FILE.txt

但它不起作用。我认为这是由于*表达的参与。我们如何处理这种情况?

2 个答案:

答案 0 :(得分:1)

你需要逃离星星:

sed 's/void \* __builtin_va_list/void \*\* __builtin_va_list/g' FILE.txt

答案 1 :(得分:1)

您可以将此搜索/替换用于捕获的组和反向引用:

sed -r 's/(void \*)( __builtin_va_list)/\1*\2/g' file
typedef void ** __builtin_va_list;

还要记住*需要转义,因为它是特殊的正则表达式元字符。