Удаление возврата каретки и escape-последовательностей табуляции из строки в Bash

Предположим, у меня есть эта строка:

Your name is\nBobby\tBlahck\r\r

как я могу удалить символы "\n, \t, \r". Строка буквально выглядит так, она не содержит вкладок или новых строк. Они только персонажи.

Когда я пытаюсь

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

tr предполагает, что я пытаюсь удалить вкладки, поэтому он не работает и печатает примерно одну и ту же строку. Есть идеи как их убрать? У меня такая же проблема с седом.

Спасибо

4 ответа

Решение
$ 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'

Это потому, что в строке нет символов табуляции. За ним следует обратный слеш 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'

Другие вопросы по тегам