用awk替换正则表达式

时间:2013-01-21 03:38:44

标签: regex linux awk

我正在尝试编写一个正则表达式,用空格替换文件中的一个或多个“+”符号。我尝试了以下方法:

 echo This++++this+++is+not++done | awk '{ sub(/\++/, " "); print }'
 This this+++is+not++done

预期:

This this is not done

为什么这不起作用的任何想法?

7 个答案:

答案 0 :(得分:17)

使用进行全局替换的gsub

echo This++++this+++is+not++done | awk '{gsub(/\++/," ");}1'

sub函数仅替换第一个匹配项,以使用gsub替换所有匹配项。

答案 1 :(得分:7)

tr命令:

echo This++++this+++is+not++done | tr -s '+' ' '

答案 2 :(得分:5)

惯用的awk解决方案只是将输入字段分隔符转换为输出分隔符:

$ echo This++++this+++is+not++done | awk -F'++' '{$1=$1}1'
This this is not done

答案 3 :(得分:4)

试试这个

echo "This++++this+++is+not++done" | sed -re 's/(\+)+/ /g'

答案 4 :(得分:3)

您也可以使用sed

echo This++++this+++is+not++done | sed -e 's/+\{1,\}/ /g'

匹配一个或多个+并将其替换为空格。

答案 5 :(得分:-1)

echo "This++++this+++is+not++done" | sed 's/++*/ /g'

答案 6 :(得分:-2)

如果您可以访问计算机上的节点,则可以通过安装rexreplace

来执行此操作
npm install -g regreplace

然后运行

rexreplace '\++' ' ' myfile.txt

如果您在目录data中有更多文件,则可以执行

rexreplace '\++' ' ' data/*.txt