sed替换正则表达式匹配

时间:2015-11-07 04:58:55

标签: regex replace sed match

我的数据集的一部分是管道分隔的csv文件:

|B20005G |77|B20005G 077|$2,500 to $4,999|
|B20005G |78|B20005G 078|$5,000 to $7,499|
|B20005G |79|B20005G 079|$7,500 to $9,999|

我将第三个字段的行与此sed表达式匹配:

sed -n '/|[[:alnum:]]\{7\} [[:digit:]]\{3\}|/p' 

现在,有没有办法告诉sed删除第三个字段中的空格来获取它:

|B20005G |77|B20005G077|$2,500 to $4,999|
|B20005G |78|B20005G078|$5,000 to $7,499|
|B20005G |79|B20005G079|$7,500 to $9,999|

2 个答案:

答案 0 :(得分:1)

试试这个awk方法

awk -F'|' 'BEGIN {OFS="|"} {sub(/ +/,"",$4)}1' FileName

<强>输出:

|B20005G |77|B20005G077|$2,500 to $4,999|
|B20005G |78|B20005G078|$5,000 to $7,499|
|B20005G |79|B20005G079|$7,500 to $9,999|

答案 1 :(得分:0)

像这样的正则表达式

\([[:alnum:]]{7}\) \([[:digit:]]{3}\)

定义了两个组,即\( \)之间的组,我们可以通过\1替换,\2,所以

sed -n 's/\([[:alnum:]]\{7\}\) \([[:digit:]]\{3\}\)/\1\2/' myfile.txt

摆脱了两组之间的空间。