Я пытаюсь заменить каждый пробел в этом текстовом файле пробелом с обратной косой чертой.
cat prefixedfiles.txt | sed "s![[:space:]]! \!g"
Оригинал:A a a
Результат:A\ a\ a
sed 's! !\\ !g' prefixedfiles.txt
Несколько проблем, которые исправлены:
'
вместо "
мешает интерпретации bash
!
символ и позволяет ссылаться на обратную косую черту как \\
;[[:space:]]
соответствует больше, чем просто пробел; хотите вы этого или нет, я использовал обычное пространство;cat
здесь лишняя; sed
может принимать имя файла в качестве аргумента (и даже если это невозможно, синтаксис sed < file.txt
все же лучше, чем cat file.txt | sed
).Избегайте обратной косой черты.
cat prefixedfiles.txt | sed "s![[:space:]]! \\!g"
sed manual 5.3 Обзор основного синтаксиса регулярных выражений
\ голец
Соответствует char, где char - это одно из значений $, *,., [, \ Или ^. Обратите внимание, что единственными C-подобными последовательностями обратной косой черты, которые вы можете предположительно интерпретировать, являются\n
и\\
; в частности,\t
не является переносимым и соответствует 't' в большинстве реализаций sed, а не символу табуляции.