linux - 替换文本文件中每一行的前六个逗号

标签 linux replace sed

我想使用 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/

相关文章:

bash - 检查 DATE 是否为回文的 SED 命令

bash - 为什么 sed 在我的 bash 脚本中不起作用?

linux - Perf 输出无法重定向到文件

linux - 在 linux 中使用 sed 或 awk 替换具有双斜杠的字符串

java - KafkaSpout 没有收到来自 Kafka 的任何信息

java - 如何在java中一次性替换两个字符串

c - C 中的字符串分词器

javascript - 将 html 标签替换为另一个标签,然后删除其他标签

java - 如何在windows上使用java执行linux命令?

python - Linux:获取日志文件的位置