在linux中的模式之间提取一个单词

时间:2013-10-06 12:15:29

标签: regex unix sed grep text-extraction

我有一个包含多行的文件,我想在-d-e之间提取单词,如果文件有多个出现,第一个就没问题。

示例:

如果文件内容如下

someText -d wordToExtract -e someOtherWord and so on, -d Hello -e

我想提取第一次出现的wordToExtract

我尝试使用grepsed命令但无法实现,因为我是unix的新手。任何帮助表示赞赏。

我试过的一个例子

grep -o -P '(?<=\\-d).*(?=\\-i)' fileName

3 个答案:

答案 0 :(得分:1)

这是您的输入文字:

x='someText -d wordToExtract -e someOtherWord and so on, -d Hello -e'

这个awk将提取第一场比赛:

awk -F '-(d|e) *' '{print $2}' <<< "$x"
wordToExtract

这个grep应该可以提取-d-e之间的所有匹配字符串:

grep -oP '\-d *\K(.*?)(?= *-e)' <<< "$x"
wordToExtract
Hello 

答案 1 :(得分:0)

使用的解决方案。我更喜欢,因为它有非greddy量词和,因为它可以避免每行多个匹配:

perl -ne 'm/-d\s*(.*?)\s*-e/ && print "$1\n"' infile

它产生:

wordToExtract

答案 2 :(得分:0)

尝试以下正则表达式:

-d(.*?)-e

显然必须转义,以及开关-o -P