Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 命令替换第n列中的数据(如果该行以pattern开头)_Regex_Unix_Awk_Sed - Fatal编程技术网

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|