Вопрос о sed

Мог кто-то помогать мне с 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)
0
задан 23 October 2017 в 02:10

3 ответа

Если Вы хотите изменить все пробелы между двумя происшествиями |---| с точками, используйте

sed 'h;s/ /./g;G;s/.*\(|---|.*|---|\).*\n\([^|]*\).*|\(.*\)/\2\1\3/'

1), Вы сохраняете исходную строку в буфере хранения с h 2), Вы заменяете все пробелы точками с s/ /./g 3), Вы добавляете исходную строку от пространства хранения с G 4) последнее s, команда сочиняет, заключительная строка из середины расстаются с заменами и первым и последним битом без замен.

1
ответ дан 2 November 2019 в 01:52

Попробуйте этот sed команда:

sed 's/\s/./g;s/432./432 /;s/!|---|./!|---| /' source.txt

И конечно можно сделать substitution на месте с sed -i или отправить его в другой файл с sed ... > output.txt

g: глобальная опция

1
ответ дан 2 November 2019 в 01:52

Я использовал бы Perl, а не sed:

perl -naF'/\|/' -e '$F[2] =~ tr/ /./; print join "|", @F'
  • -n чтения вход линию за линией
  • -a разделения каждая строка в массив @F
  • F '/\|/' использование литеральная вертикальная панель как разделитель при разделении
  • $F[2] содержит 3-й столбец
  • tr, оператор транслитерации, это заменяет пробелы точками в третьих подключениях столбца
  • join столбцы массива назад (см. соединение )
0
ответ дан 2 November 2019 в 01:52

Другие вопросы по тегам:

Похожие вопросы: