Может ли кто-нибудь помочь мне с sed, чтобы изменить эту глобальную строку в документе:
432 |---|1 M a n y - w o r d s !|---| (123.WORDS)
To:
432 |---|1.M.a.n.y.-.w.o.r.d.s.!|---| (123.WORDS)
Я бы использовал Perl, а не sed:
perl -naF'/\|/' -e '$F[2] =~ tr/ /./; print join "|", @F'
-n читает ввод строки за строкой -a, разбивая каждую строку на массив @F F '/\|/', используя вертикальную полосу буква в качестве разделителя при расщеплении $F[2] содержит третий столбец tr - оператор транслитерации, он заменяет пробелы точками в третьем столбце join, соединяет столбцы массива назад (см. join) Попробуйте выполнить эту команду sed:
sed 's/\s/./g;s/432./432 /;s/!|---|./!|---| /' source.txt
И, конечно, вы можете сделать substitution на месте с помощью sed -i или отправить его в другой файл с помощью sed ... > output.txt
g: глобальная опция
Если вы хотите изменить все пробелы между двумя вхождениями |---| с точками, используйте
sed 'h;s/ /./g;G;s/.*\(|---|.*|---|\).*\n\([^|]*\).*|\(.*\)/\2\1\3/'
1) Вы сохраняете исходную строку в буфере удержания с помощью h 2) Вы замените все пробелы точками на s/ /./g 3) Вы добавляете исходную строку из пространства удержания с помощью G 4) Последняя команда s составляет конечную строку из средней части с заменой и первым и последним бит без замены .
Я бы использовал Perl, а не sed:
perl -naF'/\|/' -e '$F[2] =~ tr/ /./; print join "|", @F'
-n читает ввод строки за строкой -a, разбивая каждую строку на массив @F F '/\|/', используя вертикальную полосу буква в качестве разделителя при расщеплении $F[2] содержит третий столбец tr - оператор транслитерации, он заменяет пробелы точками в третьем столбце join, соединяет столбцы массива назад (см. join) Попробуйте выполнить эту команду sed:
sed 's/\s/./g;s/432./432 /;s/!|---|./!|---| /' source.txt
И, конечно, вы можете сделать substitution на месте с помощью sed -i или отправить его в другой файл с помощью sed ... > output.txt
g: глобальная опция
Если вы хотите изменить все пробелы между двумя вхождениями |---| с точками, используйте
sed 'h;s/ /./g;G;s/.*\(|---|.*|---|\).*\n\([^|]*\).*|\(.*\)/\2\1\3/'
1) Вы сохраняете исходную строку в буфере удержания с помощью h 2) Вы замените все пробелы точками на s/ /./g 3) Вы добавляете исходную строку из пространства удержания с помощью G 4) Последняя команда s составляет конечную строку из средней части с заменой и первым и последним бит без замены .