Удаление возврата каретки и 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'