заменить пробелы в части текста - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу заменить пробелы только в части текста.

Мой вводимый текст выглядит следующим образом:

---start of text---test1 test2 test3 test4---end is here---

Требуется вывод:

---start of text--- 
test1
test2
test3
test4
---end is here---

Я попробовал следующую команду,

sed 's/start of text/start~of~text/; s/end is here/end~is~here/; s/text---/text--- /; s/---end/ ---end/' test_file | tr ' ' '\n' | sed 's/~/ /g'

, это работает, но для этого мне нужно жестко кодировать начало и конец текстовых строк.Есть ли способ избежать этого, я пытался использовать gsub в awk, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

С помощью GNU sed вы можете добавить новую строку после начала текста и до окончания текста, а затем выполнить цикл с помощью команды t между текстом, чтобы заменить пробелы символами новой строки:

sed -E "s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/;:a;s/(\n[^ ]*) (.*\n)/\1\n\2/;ta;" file

Пояснения:

  • s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/: используя обратную ссылку, добавляет один символ новой строки после ---start of text--- и один перед ---end is here---
  • :a;s/(\n[^ ]*) (.*\n)/\1\n\2/: заменяет символ новой строкипервый пробел после \n, за которым следуют непробельные символы (\n[^ ]*)
  • ta: цикл для обработки оставшихся пробелов.t - это команда sed test, которая возвращается к метке a, если предыдущая команда подстановки завершается
0 голосов
/ 05 февраля 2019

Не могли бы вы попробовать следующее (учитывая, что ваш Input_file такой же, как показанные образцы).

awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2 OFS ORS $3 ORS OFS $(NF-1) OFS}'  Input_file

ИЛИ

awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2,ORS $3 ORS,$(NF-1) OFS}' Input_file

Вывод будет следующим:

---start of text---
test1
test2
test3
test4
---end is here---
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...