захватите несколько строк после целевой строки соответствия

cat file | awk '{print $1,$2,$3,$4,$6}'

вывод:

A1 jhfj jdhfjkhd kdkfjjh jhsdjkfh
A2 ujhf jhdfhsd dsfkks jhsdfjhs
A3 jhfj jdhfjkhd kdkfjjh jhsdjkfh
A4 jhfj jdhfjkhd kdkfjjh jhsdjkfh
A5 ujhf jhdfhsd dsfkks jhsdfjhs

существует № 5 и 4 в строках в th 5-м столбце. Из Вашего сообщения я надеюсь, что Вы запросили как это.

2
01.03.2014, 17:18
3 ответа

Использование perl :

%perl -lne 'if(/forms=2/.../^$/ and $_!~/forms=2|^$/){print}' file
Code=06538T0  #grab this line
Code=06538T0  #grab this line
Code=11288T0  #grab this line
Code=11288T0  #grab this line
Code=00553T0 #grab this line
Code=02576T0 #grab this line
Code=02576T0 #grab this line

Использование awk :

awk '/forms=2/,/^$/{if(!/forms=2/&&!/^$/)print}' file

или:

awk '/^$/{flag=0};flag;/forms=2/{flag=1}' file

Использование sed (GNU sed):

sed '/forms=2/,/^$/{//!b};d'
1
27.01.2020, 22:06

Следующее может сработать для вас:

sed -n '/forms=2/,/^[^C]/{/^[^C]/b;p}' filename

или, как было предложено Грэмом :

sed -n '/^forms=2/,/^[^C]/ {/^Code=/p}' filename

Для вашего ввода, он выдаст:

Code=06538T0  #grab this line
Code=06538T0  #grab this line
Code=11288T0  #grab this line
Code=11288T0  #grab this line
Code=00553T0 #grab this line
Code=02576T0 #grab this line
Code=02576T0 #grab this line

Для обработки случаев, когда вы могли бы использовать такие строки, как form = 20 , можно сказать:

sed -n '/^forms=2\b/,/^[^C]/ {/^Code=/p}' filename    
2
27.01.2020, 22:06

Другой sed:

sed -n '/forms=2 /,/^$/ {/^.*forms.*$/d; /^$/d; s/  *#grab/ #grab/}' input

.

Code=06538T0 #grab this line
Code=06538T0 #grab this line
Code=11288T0 #grab this line
Code=11288T0 #grab this line
Code=00553T0 #grab this line
Code=02576T0 #grab this line
Code=02576T0 #grab this line
0
27.01.2020, 22:06

Теги

Похожие вопросы