我有一些包含空格分隔字符串(2-5)的大型文本文件。字符串可以包含“'”或“-”。我想用竖线替换第二个空格。
最好的方法是什么?
使用 sed 时我想到的是:
sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt
还有其他/更好/更简单的想法吗?
答案1
您可以在替换命令的末尾添加一个数字。例如,下面的命令将用每一行中的old
字符串替换第二次出现的:new
file
sed 's/old/new/2' file
因此,您可以使用以下方法来代替您建议的解决方案:
sed 's/ /|/2'
欲了解更多信息,请参见本 sed 教程。
答案2
你试过你的版本了吗?它有效吗?因为我认为这基本上是一个好主意。不过,我会做些不同的事情:
sed -re 's/^([^ ]+ +[^ ]+) /\1|/'
这将接受单词中非空格的任何字符,并接受前两个单词之间的多个空格。