Regex 命令替换第n列中的数据(如果该行以pattern开头)
我有一个如下所示的文件:Regex 命令替换第n列中的数据(如果该行以pattern开头),regex,unix,awk,sed,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| 我想将第四列的值替换
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开头,并且像don Remove,don Use这样的模式。但如果它像第三个例子中的一样,我想保留它
预期结果:
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.以下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|
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);
输出:
你应该使用正确的awk。提示$4~/^Dont/可能会扮演角色。工作感谢:与Ddon't(正确英语)匹配如何?可能是“''t/{$4=}1'?”上的“$4~/^[dD]-此外,如果与示例3中的值类似,我希望保留该值。有什么建议吗?@sjsam,我们当然可以。我只是想问OP的问题。
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|