Как поставить обратную косую черту перед каждым пробелом, желательно с помощью команд tr
или sed
?
Вот мой сценарий:
#!/bin/bash
line="hello bye"
echo $line | tr ' ' "\\\ "
Предполагается, что это заменяет пробелы обратным слэшем, за которым следует пробел, но это только замена пробелов обратным слешем, а не обратным слэшем + пробелом.
Это вывод, который я получаю:
hello\bye
Ожидаемый результат:
hello\ bye
tr x ' '
гдеx
персонаж, которого вы хотите заменить?Ответы:
tr
не может сделать несколько символов. Вместо этого используйте один из них:sed
или
Perl
или
В Perl также есть изящная функция,
quotemeta
которая может убрать все странные вещи в строке:Выше будет печатать
Вы также можете использовать
printf
и%q
:Итак, вы могли бы сделать
Обратите внимание, что это, как и в Perl,
quotemeta
будет экранировать все специальные символы, а не только пробелы.Если у вас есть строка в переменной, вы можете просто сделать это прямо в bash:
источник
printf
Встроенная функция Bash имеет схожую функциональностьquotemeta
-printf '%q\n' "$line"
должна это делать IIRC.В
AWK
списке отсутствуют все возможные решения :)источник