Bash用空格冒号空格序列替换逗号

时间:2015-03-27 03:58:08

标签: bash

我想用空格,冒号和空格替换文件中的所有逗号。我一直收到错误“删除时只能给出一个字符串而不会重复”。这是我的命令,我哪里错了?

tr -d "," " : " < testfile

3 个答案:

答案 0 :(得分:4)

tr -d通常用于删除字符。如果您想快速使用space-colon-space序列 1 替换逗号,只需使用:

sed 's/,/ : /g' testfile

如果您对输出感到满意,可以使用sed -i替换原始文件,如果这是您想要的:

sed -i.bak 's/,/ : /g' testfile

这将修改文件,将原始内容保留在testfile.bak中。如果您的sed版本不够高,无法使用-i选项,则可以手动执行:

mv testfile testfile.bak
sed 's/,/ : /g' testfile.bak >testfile

1 如果您只是尝试用冒号替换逗号(没有周围空格),您仍然可以使用tr

tr ',' ':' <testfile

或使用相同的-i - 仿真,如果您想要修改原始文件,则使用相同的sed实现:

mv testfile testfile.bak
tr ',' ':' <testfile.bak >testfile

答案 1 :(得分:0)

如果我正在破译你正在寻找的东西,sed可能是一个更好的工具。 tr执行替换,但仅适用于单个字符。如果给出了多个字符,则期望它们是查找和替换的列表,例如:

$ echo "hi"| tr "ih" "on"
no

将o替换为o,将n替换为n,将其替换为no。

您还使用-d开关,即删除字符。

要使用sed,你需要这样的东西:

sed 's/,/ : /g' input > output

根据所使用的sed版本,您可以使用-i开关对文件进行操作,并避免重定向和新文件。

sed是一个按行读取的流编辑器,所以这将逐行遍历文件并用冒号包围的冒号替换每个逗号。

sed非常强大,如果你想更多地使用它,你应该阅读它,但这里使用的简单语法是's/regex/replacement/g',最后g意味着全局,或全部替换。

答案 2 :(得分:0)

只需取出-d即可运行。你可能只想从冒号周围取出空格。它将采用两组的序列并替换它们。所以你用你所拥有的空间替换你的逗号。