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