15 我有大型文本文件,使用空格分隔字符串(2-5)。字符串可以包含“'”或“-”。我想用管道代替第二个空间。 最好的方法是什么? 使用sed我在想: sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt 还有其他/更好/更简单的想法吗? linux command-line sed awk — dnkb source
22 您可以在替代命令的末尾添加一个数字。例如,以下将用的每行上old的字符串替换第二次出现new的file: sed 's/old/new/2' file 因此,您可以使用: sed 's/ /|/2' 有关更多信息,请参见本sed教程。 — 姆鲁奇 source 2 从sed信息文件中:“注意:POSIX标准未指定混合g' and NUMBER modifiers, and currently there is no widely agreed upon meaning across sed实现时应发生的情况。对于GNU sed,交互定义为:忽略第NUMBER个匹配项,然后匹配并替换所有从第NUMBER开始匹配。” — 暂停,直到另行通知。 信息文件...我讨厌他们。无论如何,我删除了模棱两可的部分。好评论,+ 1。 — mrucci 1 谢谢,穆鲁奇和丹尼斯。我认为那里一定有一些简单的东西。 — dnkb 2010年 似乎我在使用文本处理时遇到的每个问题,都可以通过解决sed。我不确定我是否应该感谢您为sed我提供了更多帮助,但无论如何我还是会的。;) — Jamie
1 您尝试过您的版本了吗?奏效了吗?因为我认为这基本上是一个好主意。不过,我会做些不同: sed -re 's/^([^ ]+ +[^ ]+) /\1|/' 这将接受单词中非空格的任何字符,并且在前两个单词之间接受多个空格。 — 彼得森 source
sed
信息文件中:“注意:POSIX标准未指定混合g' and NUMBER modifiers, and currently there is no widely agreed upon meaning across
sed实现时应发生的情况。对于GNU sed,交互定义为:忽略第NUMBER个匹配项,然后匹配并替换所有从第NUMBER开始匹配。”