如果行以pattern开头,则命令替换第n列中的数据

时间:2018-01-31 12:55:57

标签: regex unix awk sed

我有一个如下所示的文件:

16815966|Mr|Fit 5|Dont Usee|15-07-2015|||||||||||||0|2|0|0.00|0|  
21875307|Mr|Father|Dont Remove|X|31-12-1899|||||||||||||0|118|0|0.00|0|
19180802|Mr|Dontye|Harr|01-01-1900|||||6666|Avenue||||||06-09-2013|0|26|2|396.00|1|   

如果以" Dont"开头,我想用空白替换第4列值和模式像Dont删除,不要使用。但如果它像第三个例子中那样我想保留它。

期望的结果:

16815966|Mr|Fit 5||15-07-2015|||||||||||||0|2|0|0.00|0|  
21875307|Mr|Father||X|31-12-1899|||||||||||||0|118|0|0.00|0|
19180802|Mr|Dontye|Harr|01-01-1900|||||6666|Avenue||||||06-09-2013|0|26|2|396.00|1|    

尝试下面和一个有awk但没有运气! sed '/^Dont/s/[^|]*//4'

2 个答案:

答案 0 :(得分:3)

关注awk可能对您有帮助。

awk -F"|" '$4~/^Dont/{$4=""} 1' OFS="|"  Input_file

输出如下。

16815966|Mr|Fit 5||15-07-2015|||||||||||||0|2|0|0.00|0|
21875307|Mr|Father||X|31-12-1899|||||||||||||0|118|0|0.00|0|

答案 1 :(得分:1)

解决 PHP

正则表达式(?m)^(?:[\w ]+\|){3}\K(?:(Dont))(?(1)[^\|]+) 替换""空字符串。

$text = '16815966|Mr|Fit 5|Dont Usee|15-07-2015|||||||||||||0|2|0|0.00|0|  
         21875307|Mr|Father|Dont Remove|X|31-12-1899|||||||||||||0|118|0|0.00|0|
         19180802|Mr|Dontye|Harr|01-01-1900|||||6666|Avenue||||||06-09-2013|0|26|2|396.00|1|';

$text = preg_replace('/(?m)^(?:[\w ]+\|){3}\K(?:(Dont))(?(1)[^\|]+)/', "",$text);
print_r($text);

<强>输出

16815966|Mr|Fit 5||15-07-2015|||||||||||||0|2|0|0.00|0|  
21875307|Mr|Father||X|31-12-1899|||||||||||||0|118|0|0.00|0|
19180802|Mr|Dontye|Harr|01-01-1900|||||6666|Avenue||||||06-09-2013|0|26|2|396.00|1|

Regex demo