替换文本文件每行中第 n 次出现的字符串

替换文本文件每行中第 n 次出现的字符串

我有一些包含空格分隔字符串(2-5)的大型文本文件。字符串可以包含“'”或“-”。我想用竖线替换第二个空格。

最好的方法是什么?

使用 sed 时我想到的是:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

还有其他/更好/更简单的想法吗?

答案1

您可以在替换命令的末尾添加一个数字。例如,下面的命令将用每一行中的old字符串替换第二次出现的:newfile

sed 's/old/new/2' file

因此,您可以使用以下方法来代替您建议的解决方案:

sed 's/ /|/2'

欲了解更多信息,请参见本 sed 教程

答案2

你试过你的版本了吗?它有效吗?因为我认为这基本上是一个好主意。不过,我会做些不同的事情:

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

这将接受单词中非空格的任何字符,并接受前两个单词之间的多个空格。

相关内容