используйте sed для замены каждого пробела обратной косой чертой

просто хочу выйти из пробелов в окнах filepath. Я пробую это
echo "111 1111 "| sed -e "s/[[:space:]]/\\ /g" то единственное соответствие пробелы, но не заменяет.

0
задан 15 December 2018 в 07:51

2 ответа

Если Вы используете двойные кавычки, bash интерпретирует \\ и выводы \ который с другой стороны интерпретируется от sed вместе со следующим пространством только к пространству.

Таким образом, Вам нужна еще одна обратная косая черта:

echo "111  1111 " | sed -e "s/[[:space:]]/\\\ /g"

но лучше использовать одинарные кавычки для предотвращения интерпретации удара:

echo "111  1111 " | sed -e 's/[[:space:]]/\\ /g'

Вывод:

111\ \ 1111\ 

Альтернативный метод:

Если у Вас есть путь к файлу как переменная, можно использовать методы Shell:

path="111  1111 "
echo ${path// /\\ }
4
ответ дан 26 October 2019 в 20:41

[[:space:]] не соответствует просто пробелам, а скорее всем пробельным символам включая вкладки и разрывы строки. Если Вы действительно хотите это, GNU sed (как в Ubuntu), имеет краткий класс \s для него:

sed 's_\s_\\&_g'

Это sзаменяет каждым (g) пробельный символ (\s, пробелы соответствий, вкладки и новые строки, встроенные в копировать/содержать пробелы) в каждой строке с обратной косой чертой (\\) и оно – & целый подобранный шаблон. Я использую другой разделитель, потому что наклонные черты и обратные косые черты всегда выглядят сбивающими с толку вместе; s/\s/\\&/g конечно, допустимо также.

Если Вы хотите заменить только пробелы, скорее используйте:

sed 's_ _\\&_g'

Пример выполняется

$ echo "111  1111 " | sed 's_ _\\&_g'
111\ \ 1111\ 

Поскольку дополнительные материалы для чтения на классах символов видят здесь на постоянном-клиенте-expressions.info.

1
ответ дан 26 October 2019 в 20:41

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

Похожие вопросы: