Создайте новые строки в первой из нескольких похожих переменных или в конце набора - PullRequest
0 голосов
/ 21 мая 2019

Кажется, я не могу получить регулярное выражение, которое не ставит перевод строки между всеми domain: вхождениями или только между domain: и dataamount:

Я пытался заключить новые строки в запятые благодаря этому полезному посту на askubuntu, чтобы я мог работать с полученными полями, но он кажется бесплодным.

| grep -e ' domain:' -e 'total' | tr '\n' , | sed 's/,dataamount:/,\ndataamount:/g' | tr , '\n'

Он просто добавит новую строку между последними domain: и dataamount:, когда я захочу его после dataamount: [0-9].*\'?

    domain: domain1.com
    domain: domain2.info
    domain: domain3.com
dataamount: 9210470
    domain: domain4.com
    domain: domain5.com
    domain: domain6.com
dataamount: '25325235235'
    domain: domain7.com
    domain: domain8.com
dataamount: 12321

Я хочу, чтобы в начале этих наборов данных были символы новой строки.

    domain: domain1.com
    domain: domain2.info
    domain: domain3.com
dataamount: 9210470

    domain: domain4.com
    domain: domain5.com
    domain: domain6.com
dataamount: '25325235235'

    domain: domain7.com
    domain: domain8.com
dataamount: 12321

Все они начинаются с domain:, и кажется, что везде, где перечислены awk / sed решения этих проблем, не учитываются как числа, так и числа в одинарных кавычках, разделенные на новые строки, и сохраняются числа И, которые будут соответствовать только начальным domain: до тех пор, пока не закончится сет, поэтому трудно найти что-либо, что будет соответствовать моей проблеме.

1 Ответ

0 голосов
/ 21 мая 2019

Ах, вы хотите добавить новые строки после dataamount.Вам необходимо group всей строки dataamount и добавить новую строку.Это можно сделать с помощью sed с помощью s/^(dataamount.*)/\1\n/g.

. Регулярное выражение ^(dataamount.*) ищет строки, начинающиеся с dataamount из-за ^.Поскольку мы используем (), мы группируем его, и он становится применимым как \1 в заменяемой части.Это \1 называется обратной ссылкой, которая является частью расширенного регулярного выражения.После ссылки, которой является вся строка, мы добавляем новую строку \n.

$ sed -r 's/^(dataamount.*)/\1\n/g' file.txt 
    domain: domain1.com
    domain: domain2.info
    domain: domain3.com
dataamount: 9210470

    domain: domain4.com
    domain: domain5.com
    domain: domain6.com
dataamount: '25325235235'

    domain: domain7.com
    domain: domain8.com
dataamount: 12321

Вы могли бы получить это из моего предыдущего толчка:

perl -pe 's#^\s+domain: (.*)\n$#\1, #;s#(dataamount.*)$#\n\1#' file.txt

Последнее регулярное выражение, s#(dataamount.*)$#\n\1#, именно это и делало; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...