使用TR删除字符串中的控制字符

7
请尝试以下命令: echo "(After Sweet Memories) Play Born To Lose Again" | tr '(' '-' | tr ')' '-' | tr ' ' '-' -After-Sweet-Memories--Play-Born-To-Lose-Again (注意双 --)
我无法修改命令并传递 (null) 值,而是必须传递另一个 -
请参考下面这个例子和错误信息: echo "(After Sweet Memories) Play Born To Lose Again" | tr '(' '' | tr ')' '' | tr ' ' '-' tr: tr: when not truncating set1, string2 must be non-emptywhen not truncating set1, string2 must be non-empty
2个回答

16
你可以使用 "tr -d" 仅删除字符。这是你正在寻找的解决方案吗?
echo "(After Sweet Memories) Play Born To Lose Again" | tr -d '(' |  tr -d ')' |  tr ' ' '-'

甜蜜回忆游戏,生来就输了再输一次


3
使用一次 tr -d '()' 命令可以同时删除两个括号字符。 - Gordon Davisson

1

已经提供了一个 tr 的解决方案,但是 tr 需要在管道中运行多个实例。你可以使用 sed 在一个进程中完成所有操作。

echo "(After Sweet Memories) Play Born To Lose Again" | sed 's/ /-/g; s/[()]//g;'
After-Sweet-Memories-Play-Born-To-Lose-Again

你甚至可以省略 echo (尽管这几乎不是问题...)
sed 's/ /-/g; s/[()]//g;' <<< "(After Sweet Memories) Play Born To Lose Again"
After-Sweet-Memories-Play-Born-To-Lose-Again

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接