【发布时间】:2016-06-30 08:55:39
【问题描述】:
假设我有一个具有下一个结构的文件(example.txt):
NAAME 111 2222 333
NAMME 111 22 333
NNA ME 444 555 2
NNAAME 1 5 8
N MEEE 44 66 111
我想用分隔符替换数字之间的空格,例如 | 或 , 但不影响名称。
我正在考虑的一个选项是更改名称中的空格并放置一个“低杠”,然后删除文件中的所有空格并写上“|”并再次将名称中的“_”更改为空格。
知道如何在 shell 中做到这一点吗?或者也许是更好的选择?
预期的输出是这样的
NAAME|111|2222|333
NAMME|111|22|333
NNA ME|444|555|2
NNAAME|1|5|8
N MEEE|44|66|111
非常感谢!
【问题讨论】:
-
我已经更新了
-
您正在显示预期的输出,名称后的所有空格都替换为管道
|和我在整个线程中看到的唯一 code重新说你想要的是andlrc写的。克里斯·梅斯(Chris Maes)和您作为对他的回答的评论所写的那篇文章并没有产生问题中所述的预期输出!那么为什么一个没有产生预期输出的答案被标记为最佳答案并且也被投票赞成。 andlrc 的答案应该被标记为最佳答案并投票赞成,因为它毕竟会产生定义的预期输出。 -
我已经使用了答案
sed -i 's/\([[:digit:]]\)\ \([[:digit:]]\)/\1|\2/g' file.txt加上sed -i 's/\([[:upper:]]\)\ \([[:digit:]]\)/\1|\2/g',它适用于我的文件。也许是我缺少的东西,因为我对 shell 了解不多,但它可以工作 -
在编辑原始问题之前,Chris Maes 的回答在
1和5之间留了一个空格,例如NAME4|1 5|8因此他的回答是错误的。通过您的编辑,它会在5和8之间留下一个空格,例如NNAAME|1|5 8并添加您的sed命令不会改变任何事情!他以及您添加的内容仍然没有产生您问题中所述的预期结果,因此它仍然是错误的!只有andlrc的回答是按要求做的,在名称后用管道|替换所有空格。你现在明白了吗!? -
好的,是的!打扰一下。我忘记了 1 和 5 之间有一个空格。