Как проанализировать несколько строковых шаблонов в скрипте оболочки Linux

Как проанализировать несколько строковых шаблонов в скрипте оболочки Linux

Я новичок в оболочке Linux, и мне было трудно придумать решение этой проблемы. Может кто-нибудь помочь, как разобрать несколько строк (данных) в файле? Для файла ниже я хочу разобрать все значения, рядом с BIG*20021208*00001**которыми находятся следующие: A999, A1000, 1001.

ST*810*0001
BIG*20021208*00001**A9
99*N1*ST*XYZ Test Corporation*9*122334455
N3*987 Freeway Dr.
N4*New York*NY*98765
N1*BT*ABC Test Company*9*122334455
N3*123 Highway Street
N4*Los Angeles*CA*12345
ITD*01*3*2**30**30*****60
FOB*PP
IT1**1*EA*200**UA*EAN
PID*F****Lamp
IT1**4*EA*50**UA*EAN
PID*F****Chair
TDS*2000
CAD*****Routing
ISS*30*CA
CTT*50
SE*19*0001
ST*810*0002
BIG*20021208*00001**A1000
N1*ST*XYZ Test Corporation*9*122334455
N3*987 Freeway Dr.
N4*New York*NY*98765
N1*BT*ABC Test Company*9*122334455
N3*123 Highway Street
N4*Los Angeles*CA*12345
ITD*01*3*2**30**30*****60
FOB*PP
IT1**1*EA*200**UA*EAN
PID*F****Lamp
IT1**4*EA*50**UA*EAN
PID*F****Chair
TDS*2000
CAD*****Routing
ISS*30*CA
CTT*50
SE*19*0002
ST*810*0003
BIG*20021208*00001**10
01N1*ST*XYZ Test Corporation*9*122334455
N3*987 Freeway Dr.
N4*New York*NY*98765
N1*BT*ABC Test Company*9*122334455
N3*123 Highway Street
N4*Los Angeles*CA*12345
ITD*01*3*2**30**30*****60
FOB*PP
IT1**1*EA*200**UA*EAN
PID*F****Lamp
IT1**4*EA*50**UA*EAN
PID*F****Chair
TDS*2000
CAD*****Routing
ISS*30*CA
CTT*50
SE*19*0003

Теперь, как вы можете видеть в сегменте BIG, значение A999 уже было разделено (больше не целым). Тогда моя проблема теперь в том, что когда я получаю данные (например, A999), он генерирует только это A9, а не все значение, которое является A999. Есть ли какое-либо решение для этого?

решение1

sed '/BIG.20021208.00001/!d;s/.*\*//' <<\DATA
    ST*810*0001
    BIG*20021208*00001**A999
    N1*ST*XYZ Test Corporation*9*122334455
    N3*987 Freeway Dr.
    N4*New York*NY*98765
    N1*BT*ABC Test Company*9*122334455
    N3*123 Highway Street
    N4*Los Angeles*CA*12345
    ITD*01*3*2**30**30*****60
    FOB*PP
    IT1**1*EA*200**UA*EAN
    PID*F****Lamp
    IT1**4*EA*50**UA*EAN
    PID*F****Chair
    TDS*2000
    CAD*****Routing
    ISS*30*CA
    CTT*50
    SE*19*0001
    ST*810*0002
    BIG*20021208*00001**A1000
    N1*ST*XYZ Test Corporation*9*122334455
    N3*987 Freeway Dr.
    N4*New York*NY*98765
    N1*BT*ABC Test Company*9*122334455
    N3*123 Highway Street
    N4*Los Angeles*CA*12345
    ITD*01*3*2**30**30*****60
    FOB*PP
    IT1**1*EA*200**UA*EAN
    PID*F****Lamp
    IT1**4*EA*50**UA*EAN
    PID*F****Chair
    TDS*2000
    CAD*****Routing
    ISS*30*CA
    CTT*50
    SE*19*0001
    ST*810*0002
    BIG*20021208*00001**A1000
    N1*ST*XYZ Test Corporation*9*122334455
    N3*987 Freeway Dr.
    N4*New York*NY*98765
    N1*BT*ABC Test Company*9*122334455
    N3*123 Highway Street
    N4*Los Angeles*CA*12345
    ITD*01*3*2**30**30*****60
    FOB*PP
    IT1**1*EA*200**UA*EAN
    PID*F****Lamp
    IT1**4*EA*50**UA*EAN
    PID*F****Chair
    TDS*2000
    CAD*****Routing
    ISS*30*CA
    CTT*50
    SE*19*0002
    ST*810*0003
    BIG*20021208*00001**1001
    N1*ST*XYZ Test Corporation*9*122334455
    N3*987 Freeway Dr.
    N4*New York*NY*98765
    N1*BT*ABC Test Company*9*122334455
    N3*123 Highway Street
    N4*Los Angeles*CA*12345
    ITD*01*3*2**30**30*****60
    FOB*PP
    IT1**1*EA*200**UA*EAN
    PID*F****Lamp
    IT1**4*EA*50**UA*EAN
    PID*F****Chair
    TDS*2000
    CAD*****Routing
    ISS*30*CA
    CTT*50
    SE*19*0003
DATA

Это дает только следующие результаты:

A999
A1000
1001

решение2

С помощью GNU grepвы можете попробовать:

$ grep -oP 'BIG\*20021208\*00001\*\*\K.*' file
A999
A1000
1001

Если ваша grepверсия не поддерживает PCRE, вы можете использовать вместо этого perl:

$ perl -nle 'print $& if /BIG\*20021208\*00001\*\*\K.*/'

Связанный контент