Вы хотите что-то вроде этого:
awk '/AA/{f=a=1} /ZZ/{f=z=1} f{hits=hits $0 ORS; f=0} END{if (a && z) printf "%s", hits}'
обрабатывать случаи, когда АА и/или ZZ появляются несколько раз, можно чередованием друг с другом, например:
$ cat file
a
AA
b
AA
c
ZZ
d
AA
e
ZZ
f
$ awk '/AA/{f=a=1} /ZZ/{f=z=1} f{hits=hits $0 ORS; f=0} END{if (a && z) printf "%s", hits}' file
AA
AA
ZZ
AA
ZZ
Общее решение для поиска любого количества регулярных выражений в файле, btw, будет:
$ cat tst.awk
BEGIN {
split(tgts,tmp)
for (idx in tmp) {
wanted[tmp[idx]]
}
}
{
found = 0
for (regexp in wanted) {
if ($0 ~ regexp) {
found = 1
seen[regexp]
}
}
}
found {
hits = hits $0 ORS
}
END {
if (length(wanted) == length(seen)) {
printf "%s", hits
}
}
$ awk -v tgts="AA ZZ" -f tst.awk file
AA
AA
ZZ
AA
ZZ
Строка вместо сопоставления с регулярным выражением будет:
for (string in wanted) {
if (index($0,string) {
found = 1
seen[string]
}
}
Пожалуйста, сформулируйте Ваши оболочки. Также вы имеете в виду, что AA BB CC DD должен находиться в одной строке или только в том же файле? – digipenKH
@Harish Selvam: Вы можете уточнить свое требование с большим количеством контента? – blackSmith