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

Removing carriage return and tab escape sequences from string in Bash

假设我有这个字符串:

Your name is\nBobby\tBlahck\r\r

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

当我尝试时

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

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

谢谢

那是因为字符串中没有任何制表符。它后面有一个反斜杠 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 字符串中的特殊字符,请使用 `$'...' 来创建它们。

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

的另一个回答

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

$ 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

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

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