1

Я пытаюсь заменить каждый пробел в этом текстовом файле пробелом с обратной косой чертой.

cat prefixedfiles.txt | sed "s![[:space:]]! \!g"

Оригинал:A a a

Результат:A\ a\ a

2 ответа2

1
sed 's! !\\ !g' prefixedfiles.txt

Несколько проблем, которые исправлены:

  • ' вместо " мешает интерпретации bash ! символ и позволяет ссылаться на обратную косую черту как \\ ;
  • [[:space:]] соответствует больше, чем просто пробел; хотите вы этого или нет, я использовал обычное пространство;
  • cat здесь лишняя; sed может принимать имя файла в качестве аргумента (и даже если это невозможно, синтаксис sed < file.txt все же лучше, чем cat file.txt | sed).
0

Избегайте обратной косой черты.

cat prefixedfiles.txt | sed "s![[:space:]]! \\!g"

sed manual 5.3 Обзор основного синтаксиса регулярных выражений

\ голец
Соответствует char, где char - это одно из значений $, *,., [, \ Или ^. Обратите внимание, что единственными C-подобными последовательностями обратной косой черты, которые вы можете предположительно интерпретировать, являются \n и \\ ; в частности, \t не является переносимым и соответствует 't' в большинстве реализаций sed, а не символу табуляции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .