regex - 如果该行以模式开头,则替换第 n 列中的数据的命令

标签 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”开头且模式如“不删除”、“不使用”,我想将第四列值替换为空白。但如果它像第三个例子中的一个,我想保留它。

期望的结果:

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|

关于regex - 如果该行以模式开头,则替换第 n 列中的数据的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542747/

相关文章:

c# - 用于提取此 HTML 文件的一部分的正则表达式

regex - 如何在正则表达式中只查找换行符?

python - 查找并替换引号之间的字符串

sorting - 为什么 Unix 排序进程在消耗输入时不会增长?

c - C shell 中的输出重定向

linux - 如何从 shellscript 对系统间缓存执行一些命令?

linux - 如何从 gz 文件中提取特定文本?

python - 按找到的第一个子字符串拆分字符串

linux - 没有尾部斜杠的目录列表 "/"

linux - 一个用于计算按键排序的字段的平均值的单行?