2

Я подумал, что это будет легко, но я упускаю из виду кое-что простое:

У меня есть текстовый файл с именем test . Он содержит, например, строку Alfred Hitchcock . Я хочу заменить это Alfred\ Hitchcock .

Я подумал, что это сделает это:

grep -r1 ' ' /path/to/test | xargs sed -i 's/ /\ /g'

Но это говорит мне:

sed: can't read Alfred: No such file or directory
sed: can't read Hitchcock: No such file or directory

Не совсем уверен, что происходит. Любая помощь будет отличной, спасибо.

3 ответа3

7

Вам не нужен grep вообще:

sed -i 's/ /\ /g' /path/to/test

Это исключит все пробелы в файле. Чтобы избежать только некоторых строк, смотрите ответ Гуру.

Теперь, если вы хотите сделать это для всех файлов, которые содержат символ пробела в данном каталоге:

grep -rl ' ' /path/to/test/dir | xargs sed -i 's/ /\ /g'

которая теперь, я понимаю, идентична вашей командной строке, за исключением символа после -r , который должен быть в нижнем регистре L

(Примечание: я предполагаю, что используются инструменты GNU.)

2

В одну сторону:

sed -i 's/Alfred Hitchcock/Alfred\\ Hitchcock/' /path/to/test
1

Попробуйте выполнить команду grep самостоятельно, чтобы увидеть, что происходит.

Он напечатает что-то вроде

/path/to/test/test:Alfred Hitchcock

При передаче этого к xargs, он будет пытаться выполнить

sed -i 's/ /\ /g' /path/to/test/test:Alfred
sed -i 's/ /\ /g' Hitchcock

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