我想使用 sed 或 linux 中的类似工具替换文本文件中每一行的前六个 ,
。
每行有六个以上的,
,但只有前六个应该用|
代替。
最佳答案
Sed 并不真正支持“第 n 次出现”的概念,仅支持“第 n 次出现”; GNU sed 有一个用于“替换第 n 开始的所有匹配项”,在这种情况下这不是您想要的。要替换前六个逗号,您必须调用 s
命令六次:
sed 's/,/|/;s/,/|/;s/,/|/;s/,/|/;s/,/|/;s/,/|/' infile
但是,如果您知道文件中没有 |
并且您有 GNU sed,则可以这样做:
sed 's/,/|/g;s/|/,/7g' infile
这会将 所有 逗号替换为管道,然后将管道从第 7 个开始变回逗号。
如果您确实事先有管道,您可以先将它们变成您知道不在字符串中的东西:
sed 's/|/~~/g;s/,/|/g;s/|/,/7g;s/~~/|/g' infile
这使得所有的|
首先进入~~
,然后所有的,
进入|
,然后是|
从7号开始回到,
,最后~~
回到|
。
测试这个输入文件:
,,,,,,X,,,,,,
,,,|,,,|,,,|,,,|
第一个和第三个命令结果为
||||||X,,,,,,
||||||||,,,|,,,|
第二个将在第二行失败,因为已经有管道字符。
关于linux - 替换文本文件中每一行的前六个逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419555/