2013-10-29 105 views
1

我有一个包含太多charechter和符号的文件。我想找到一个确切的字符串,然后剪切它,并将其赋予两个变量。我用grep写了它,但我想写在**AWK**SEDAWK正则表达式查找字符串与模式

这里是我的示例文件:

[email protected]|A#Z<inCWV6a=L?o`A5vIod"%[email protected],L;aN 
r^n<&)}[??!VcVIV**2zTest1.Test2n9**94EN~yK,$lU=9?UT.[ 
e`)G:FS.nGz%[email protected]~k!20aLJ^PU-[@}0W\ !8x 
cujOmEK"1;!cI134lu%0-A +/t!VIf?8uT`! 
aC1QAQY>4RE$46iVjAE^eo5yR| 
1?/T?<H5,%G~[|9I/c&8MY$O]%,UYQe{!{Bm[rRC[ 
aHC`<[email protected]_O>Yct.MXo[>r5^uV&[email protected]'Kiu\Y 
K(*}ldO:ZQnI8t989fi+ 
CrvEwmTQ80k3==,a'Jj9907+}NNy=0Op 
"nzb.j-.i%z5`U*8][email protected]'r;\x\;ylr_;q5F` A!~p* 

首先我想找到2zTest1.Test2n9再切前2后两个charechter终于得到两个词没有点(。)。第一个字我会发送到一个变量和第二个两个另一个变量。

注意:我想要找到2zTest1.Test2n9然后我想剪下它。

输出:

variable 1 = test1 
variable 2 = test2 

由于

+0

重复发布? http://stackoverflow.com/questions/19655060/found-string-with-regex-in-awk-or-sed – Jotne

回答

2

sed随着其:

sed -n 's/.*\(2z\(\(.*\)\.\(.*\)\)n9\).*/variable 1 = \L\3\nvariable 2 = \L\4/p' your.file 

输出:

variable 1 = test1 
variable 2 = test2 
+0

谢谢。我不想给我的sed命令** 2z **和** n9 **。我可以使用'regex'作为例子'[0-9] [a-z]'而不是2z和n9。 – MSK

+0

[0-9] [a-z]作为起始分隔符只有在确定varname是大写的时才起作用。但[az] [0-9]永远不会作为结尾分隔符,因为var名称本身包含[az] – hek2mgl

+0

它并不总是'2z'和'n9',例如somthimes是'2X'和'T9'或' 2g'和'M9'。 2和9是永久性的,但这些数字之前和之后都是可变的。 – MSK

2

利用GNU AWK:

read var1 var2 < <(
    gawk 'match($0, /2[[:alpha:]]([^.]+)\.(.*)[[:alpha:]]9/, m) { 
     print m[1], m[2] 
    }' file 
) 
echo "var1=$var1" 
echo "var2=$var2" 
var1=Test1 
var2=Test2 

我看了你的意见hek2mgl的答案 - 这些要求需要在问题本身。

相关问题