匹配文件中的模式并在第二列中打印匹配的单词(不是整行)

xrk*_*rkr 3 sed awk shell-script text-processing

我正在尝试在包含以下信息的文件中匹配模式“SHM”并打印与该模式匹配的单词。

LOCALZONE01     ASHM001002003VOL01
                BSHM001002003VOL02
                CSHM001002003VOL03
                DSHM001002003VOL03_DUP
                ESHM001002003VOL04
                FSHM001002003VOL05
                GSHM001002003VOL06_
                HSHM001002003VOL07
Run Code Online (Sandbox Code Playgroud)

我尝试使用 awk 打印第二列:

grep "SHM" <filename.txt> | awk -F" " '{print $2}'

ASHM001002003VOL01
Run Code Online (Sandbox Code Playgroud)

如果我尝试打印第 1 列,它会给我以下输出:

LOCALZONE01
BSHM001002003VOL02
CSHM001002003VOL03
DSHM001002003VOL03_DUP
ESHM001002003VOL04
FSHM001002003VOL05
GSHM001002003VOL06_
HSHM001002003VOL07
Run Code Online (Sandbox Code Playgroud)

下面是我想要的输出。我怎么才能得到它?

ASHM001002003VOL01
BSHM001002003VOL02
CSHM001002003VOL03
DSHM001002003VOL03_DUP
ESHM001002003VOL04
FSHM001002003VOL05
GSHM001002003VOL06_
HSHM001002003VOL07
Run Code Online (Sandbox Code Playgroud)

Jef*_*ler 5

如果您有可用的 GNU grep,

grep -Eo '[[:alnum:]_]*SHM[[:alnum:]_]*' < filename.txt
Run Code Online (Sandbox Code Playgroud)

如果没有,您可以要求 awk 遍历每一行的字段,寻找 SHM:

awk '{ for(i=1;i<=NF;i++) if ($i ~ /SHM/) print $i }' < filename.txt
Run Code Online (Sandbox Code Playgroud)