Как извлечь часть строки на основе начальной подстроки и конечной подстроки, используя sed или awk - PullRequest
0 голосов
/ 26 июня 2018

У меня есть многострочный файл с текстом без пробелов.

Thereisacat;whichisverycute.Thereisadog;whichisverycute.
Thereisacat;whichisverycute.Thereisadog;whichisverycute.

Я хочу извлечь строку между cat и cute (первое вхождение, а не второе), то есть вывод:

;whichisvery
;whichisvery

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

sed -e 's/.*cat\(.*\)cute.*/\1/'

Я получаю

;whichisverycute.Thereisadog;whichisvery
;whichisverycute.Thereisadog;whichisvery

Как я могу получить текст от кота до первого появления симпатичного не последнего?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Учитывая введенные вами данные, все что вам нужно:

$ awk -F'cat|cute' '{print $2}' file
;whichisvery
;whichisvery
0 голосов
/ 26 июня 2018

РЕДАКТИРОВАТЬ: С тех пор, как я отказался от голосования, я дал решение в awk, которое я не мог понять, почему. Таким образом, добавив решение в sed (пытаясь убрать отрицательный голос).

sed 's/cute.*//;s/.*cat//' Input_file

Не могли бы вы попробовать и сообщите мне, поможет ли это вам.

awk '{sub(/cute.*/,"");sub(/^.*cat/,"");print}'  Input_file
...