С GNU awk (для ясности я добавил распечатку номера поля с печатью i
перед $i
):
$ gawk 'BEGIN{FS="\\\\\""} {for (i=1;i<=NF;i++) if (match($i, /USER/)) print i, $i}' file
7 USER1
18 USER2
29 USER3_HERE
Если вы хотите, чтобы поле следовало за этими полями:
$ gawk 'BEGIN{FS="\\\\\""} {for (i=1;i<=NF;i++) if (match($i, /USER/)) print $i, $(i+1)}' file
USER1 ;s:7:
USER2 ;s:7:
USER3_HERE ;s:7:
Вы можете использовать GNU grep:
$ ggrep -oP 'USER[^;]*;([^\\]*)\\"company' file
USER1\";s:7:\"company
USER2\";s:7:\"company
USER3_HERE\";s:7:\"company
Или Perl, если вам нужна группа совпадений:
$ perl -lnE 'say for /USER[^;]*;([^\\]*)\\"company/g' file
s:7:
s:7:
s:7: