【发布时间】:2015-06-14 05:38:24
【问题描述】:
我想检查 CSV 文件第二列中的模式(仅当模式以开头时),如果该模式存在,则替换同一行中的其他内容。
如果模式 676 存在于第二列中,我为跟随 csv 编写了以下 sed 命令以将 I 更改为 N。但它也会检查第 7 列和第 9 列中的 676,因为存在 ,676。理想情况下,如果前缀 676 存在,我只想检查第二行。我只想检查第二列中前缀的 676(模式不在第二个值 Ex-46769777 的中间或末尾),然后将 ,I, 更改为 ,N,。
sed -i '/,676/ {; s/,I,/,N,/;}' temp.csc
6768880,55999777,S,I,TTTT,I,67677,yy
6768880,676999777,S,I,TTTT,I,67677,yy
6768880,46769777,S,I,TTTT,I,67677,yy
需要预期的结果
6768880,55999777,S,I,TTTT,I,67677,yy
6768880,676999777,S,N,TTTT,N,67677,yy
6768880,40999777,S,I,TTTT,I,67677,yy
【问题讨论】:
-
很难在
sed中编写可以做到这一点的可支持代码。你真的在乎它是不是sed?awk的设计考虑到了这些问题,并且很容易实现。祝你好运。 -
您的输出中有错误。
46769777怎么变成40999777