需要帮助将perl RegExp查询转换为sed one

时间:2014-05-30 08:19:17

标签: regex perl bash sed grep

我编写了用于解析输入文本/文件的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的主要区别。

3 个答案:

答案 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