Grep с выражением регулярного выражения - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужен контент между четвертым и пятым "|" на всех строках, начинающихся с FHEAD. Цель состоит в том, чтобы применить регулярное выражение в grep для чтения файлов.

У меня есть это выражение, которое возвращает все содержимое между "|"

(?<=\|)(.*?)(?=\|)

Целью в примере ниже было бы возвращение

1047
8401-

FHEAD|1|PRMPC|20200217103050|1047|S
TMBPE|FHEAD|2|MOD
FHEAD|3|8401|230008|8401-|8401-Dcto|8401-Dcto 10FHEAD|1|235211|20190206000001|20190402235959|2||1||8||
TPGRP|4|240184
TGLIST|5|235213||||FHEAD
TLITM|6|101029605
TLITM|7|FHEAD101052978

Кто-то может мне помочь?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Для печати содержимого пятого поля (не пустого) в строках, начинающихся с FHEAD:

awk -F'|' '$1=="FHEAD" && $5!=""{print $5}' file
0 голосов
/ 18 февраля 2020
awk -F '|' '$5=="1047" || $5=="8401-"{ print $0 }"  inputfile.txt

Сверху вы найдете "1047" или "8401" в пятом столбце входного файла "inputfile.txt"

grep -E "\|1047\||\|8401-\|" inputfile.txt

Сверху будет делать то же самое с grep (но это не будет ограничено столбцом 5.

РЕДАКТИРОВАТЬ: Я, должно быть, пропустил 'начиная с FHEAD' ....

awk -F\| '/^FHEAD/{ print $5 }'  inputfile.txt

или с grep

grep -e '^FHEAD|\(.[^|]*|\)\{3\}\(.[^|]*\)' -o inputfile.txt | grep  '.[^|]*|*' -o | grep -v '|$'

комбинация grep и cut:

grep -e '^FHEAD' inputfile.txt | cut -d'|' -f 5
...