从Bash中的字符串中删除回车符和制表符转义序列

时间:2015-06-10 20:37:44

标签: bash tr

假设我有这个字符串:

Your name is\nBobby\tBlahck\r\r

如何删除字符“\ n,\ t,\ r \ n”。字符串看起来像这样,它不包含制表符或新行。他们只是人物。

当我尝试

echo "Your name is\nBobby\tBlahck\r\r" | tr -d '\t'

tr假设我正在尝试删除标签,因此它不起作用并打印出相同的字符串。有关如何删除它们的任何想法?我和sed有同样的问题。

由于

4 个答案:

答案 0 :(得分:1)

这是因为字符串中没有任何制表符。它有一个反斜杠跟t但没有标签:

$ echo "Your name is\nBobby\tBlahck\r\r" | tr -d '\t'
Your name is\nBobby\tBlahck\r\r

此字符串中有一个标签,tr将其删除:

$ echo $'Your name is\nBobby\tBlahck\r\r'
Your name is
Bobby   Blahck
$ echo $'Your name is\nBobby\tBlahck\r\r' | tr -d '\t'
Your name is
BobbyBlahck

如果你想在bash字符串中使用特殊字符,请使用'$'...'来创建它们。

答案 1 :(得分:1)

$ echo "Your name is\nBobby\tBlahck\r\r" | sed -E 's,\\t|\\r|\\n,,g'
Your name isBobbyBlahck

$ echo "Your name is\nBobby\tBlahck\r\r" | sed -e 's,\\[trn],,g'
Your name isBobbyBlahck

-E在OS X上;否则用-r替换它。

答案 2 :(得分:1)

使用字符组检查' \'后面的内容:

echo "Your name is\nBobby\tBlahck\r\r" | sed -r 's/\\[nrt]/ /g'

答案 3 :(得分:-1)

sed -e 's/[\\\][t]//g' -e 's/[\\\][n]//g' -e 's/[\\\][r]//g'

另一个答案

sed -e 's/\\[[a-z]]*//g'