Получение определенного набора линий, когда шаблон соответствует - PullRequest
0 голосов
/ 15 мая 2018

Ввод

abc  
cde  
efg  
xyz  
abc  
jkl  
mno  
xyz 

Теперь я хочу получить линии между шаблоном abc и xyz, но для второго совпадения.

вывод

cde  
efg

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Awk подход:

awk '/abc/ && ++c == 2{ f = 1; next }/xyz/{ f = 0 }f' file

Выход:

jkl
mno
0 голосов
/ 15 мая 2018

Когда вы используете sed, вы должны что-то сделать, чтобы найти второй удар.
Сначала выберите линии, которые соответствуют.Таким образом, вы уверены, что первая строка будет abc при наличии совпадений (я не пишу ^abc$, возможно, подстрока тоже должна совпадать).

sed -n '/abc/,/xyz/ p' inputfile 

Теперь удаляйте до второй abc.Если ваш вход имеет только одну abc, все строки удаляются.

sed '/abc/,/abc/d'

Когда вы удаляете строки с xyz до EOF, это будет

sed -n '/abc/,/xyz/ p' inputfile | sed '/abc/,/abc/d; /xyz/,$ d'
0 голосов
/ 15 мая 2018
awk '/abc/{count++;next} count==2{flag=1}  /xyz/ && flag{print val;val=flag=""} flag{val=val?val ORS $0:$0}' Input_file

Пояснение:

awk '
/abc/{                    ##Checking condition here if a line is having string abc in it then do following.
   count++;               ##Increment variable named count with 1 each time cursor comes here.
   next}                  ##Using next keyword which will skip all further statements written.
count==2{                 ##Checking condition here if a variable count value is 2 here then do following.
   flag=1}                ##Setting variable named flag value is set to 1 here.
/xyz/ && flag{            ##Checking conditions here is a line is having string xyz and variable named flag is SET here then do following.
   print val;             ##Printing variable named val here.
   val=flag=""}           ##Nullifying variable val and flag here.
flag{                     ##Checking condition here if variable flag value is NOT NULL then do following.
   val=val?val ORS $0:$0  ##Create variable named val and concatenate its value with its own value each time cursor comes here.
}' Input_file             ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...