我有一个包含以下示例的文件:
*
ABCD Z12,
$ (67,EAGL165XQ.58,AD=0.0001,SF=7.0,TC=EAGL165XQ.58,LY={70},DT={0},BX=0.0,BY=0.0,UX=240.0,UY=8000.0)
ROWS 41860/111496
*
我需要做的是将EAGL165XQ.58
的第一次出现添加到变量中。我该如何使用正则表达式呢?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用sed
进行此操作,但是必须使用0,addr2
地址范围(请参见sed(1) - Linux manual page)将sed
设置为位于其范围的末尾第一场比赛,例如
$ sed -n '0,/.*EAGL/s/^[^,]*[,]\(EAGL[^,]*\),.*$/\1/p' < file
EAGL165XQ.58
说明
0,addr2
之前使用s/find/replace
模式,其中find
使用[,]
,后跟EAGL
\(...\)
,用于将匹配的EAGL...
存储到以下逗号,以及其中\1
用作replace
,用\(...\)
之间捕获的内容替换整行要将结果捕获到变量中,可以使用命令替换,例如
$ myvar=$(sed -n '0,/.*EAGL/s/^[^,]*[,]\(EAGL[^,]*\),.*$/\1/p' < file)
$ echo $myvar
EAGL165XQ.58
仔细检查一下,如果还有其他问题,请告诉我。
答案 2 :(得分:0)
在gnu bash上尝试
而IFS =',='读-r s
做
[[$ s =〜EAGL165XQ \ .58]] && {var = $ {BASH_REMATCH}; break; }
完成<文件
在gnu sed上尝试
var = $(sed -En's / [^,=] *。(EAGL165XQ.58)。* / \ 1 / p'文件)
回声$ var
EAGL165XQ.58