2015-11-07 137 views
0

部分我的数据集的是管道分隔CSV文件:SED替代正则表达式匹配

|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| 

回答

0

像这样

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

一个正则表达式定义\(\)之间两个组,那些,我们可以通过参考在所述取代\1\2,所以

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

它摆脱了两组之间的空间。

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| 
+0

谢谢你的优雅awk解决方案! –