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

dnk*_*nkb 19 linux awk sed command-line

我有带有空格分隔字符串 (2-5) 的大文本文件。字符串可以包含“'”或“-”。我想用管道代替第二个空格。

最好的方法是什么?

使用 sed 我在想这个:

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

任何其他/更好/更简单的想法?

mru*_*cci 26

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

sed 's/old/new/2' file
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用:

sed 's/ /|/2'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见例如此 sed 教程

  • 来自 `sed` 信息文件:*"注意:POSIX 标准没有指定当你混合使用 `g' 和 NUMBER 修饰符时会发生什么,目前在 `sed' 实现中没有广泛同意的含义。对于 GNU ` sed',交互定义为:忽略第 NUMBER 个之前的匹配项,然后匹配并替换第 NUMBER 个之后的所有匹配项。"* (2认同)