3 Есть ли в любом случае, чтобы вставить новые линии между двумя образцами - PullRequest
0 голосов
/ 27 сентября 2019

Есть ли в любом случае, чтобы вставить новые строки между 2 конкретными образцами символов?Я хочу вставлять новую строку каждый раз, когда "butterfly" встречается в текстовом файле, однако я хочу, чтобы эта новая строка была вставлена ​​между "butter" и "fly".Например, butter\nfly

Я также хочу найти длину каждой строки после разбиения.

Например:

, если текстовый файл содержит:

fgsccgewvdhbejbecbecbou бабочка bvdcvhkebcjl
vdjchvhecbih бабочка glehblejkbedk бабочка r

Затем я хочу получить результат, подобный следующему:

29 fgsccgewvdhbejbecbecboubutter       
33 flybvdcvhkebcjlvdjchvhecbihbutter        
22 flyglehblejkbedkbutter         
4 flyr

Я полагаю, что один из способов решения этой проблемы - вставить новую строку, используя "sed" везде, где встречается "butter", а затем "fly".Уберите всю пустую строку, используя grep с флагом -v.Затем получите длину каждой строки.Однако даже после многих попыток я не могу получить правильный ответ.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Это может сработать для вас (GNU sed & bash):

sed -Ez 's/\n//g;s/(butter)(fly)/\1\n\2/g;s/^.*$/l=&;printf "%d %s\n" ${#l} &/meg' file

Перетянуть файл в память, используя параметр -z sed.Удалите все существующие новые строки, а затем вставьте новые между butter и fly.Используя флаги m, g и e команды sed substitute, разделите их на отдельные строки и с помощью bash создайте переменную l и через printf напечатайте требуемый формат.

0 голосов
/ 27 сентября 2019

Подкоманда Sed 's + awk может работать вместе:

sed -e "s/butterfly/butter\\nfly/g" < input.txt | awk '{ print length, $0 }'
...