我想用空格,冒号和空格替换文件中的所有逗号。我一直收到错误“删除时只能给出一个字符串而不会重复”。这是我的命令,我哪里错了?
tr -d "," " : " < testfile
答案 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即可运行。你可能只想从冒号周围取出空格。它将采用两组的序列并替换它们。所以你用你所拥有的空间替换你的逗号。