我编写了用于解析输入文本/文件的perl脚本,如下所示:
[root@agent tmp]# head ./test_regqexp_keynote.txt
alert@keynote.com (Top20) Carnation GB/fd (Crit) 9:57 11 KB
alert@keynote.com (Shell Brand EUR) HealthScience NL/fd (Crit) 9:36
11 KB
alert@keynote.com (Shell Corp AMS) Nestle JP/fd (Crit) 9:16 11 KB
alert@keynote.com (Top20) NestleHealth DE/fd (Crit) 9:01 11 KB
alert@keynote.com (Shell Corp AMS) Nestle NZ/fd (Crit) 8:17 12 KB
alert@keynote.com (Shell Brand EUR) HealthScience CH/fd (Crit) 8:11
11 KB
alert@keynote.com (Shell Corp AMS) Nestle CL/fd (Crit) 8:11 11 KB
alert@keynote.com (Shell Corp AMS) Nestle VE/fd (Crit) 8:11 11 KB
并在输出中获得如下文字:
HealthScience FI/fd
DolceGusto NZ/fd
Waters WW/fd
Nestle UA/fd
Nestle SK/fd
Nestle SI/fd
perl -ne 'if ($_=~ m/([a-zA-Z]* [A-Z]{2,3}\/fd)/) {print "$1\n";}'
所以只提取部分" XXXX XX / fd"。
但是我需要使用SED工具来完成它。
这让我发疯了。似乎SED以完全不同的方式工作或具有非常不同的RegEx规则。
请帮我将此RegExp查询转换为SED RegExp查询。或者解释Perl或Egrep RegExp中Sed RegExp的主要区别。
答案 0 :(得分:1)
这是一种方式:
sed -n 's!.* \([a-zA-Z]* [A-Z]\{2,3\}/fd\).*!\1!p' input
也许这也可能有用:
sed -n 's!.* \([^ ]* [^ ]*/fd\).*!\1!p' input
答案 1 :(得分:0)
sed -n 's#.* \([a-zA-Z]* [A-Z]\{2,3\}/fd\).*#\1#p' test_regqexp_keynote.txt
或者:
egrep -o '[a-zA-Z]* [A-Z]{2,3}/fd' test_regqexp_keynote.txt
答案 2 :(得分:0)
您可以尝试使用此awk
awk -F"[)] | [(]" 'NF>3{print $3}' file
Carnation GB/fd
HealthScience NL/fd
Nestle JP/fd
NestleHealth DE/fd
Nestle NZ/fd
HealthScience CH/fd
Nestle CL/fd
Nestle VE/fd