0

我有一个包含多行的文件,我想提取介于两者之间的单词-dand -e,如果文件出现多次,第一个就可以了。

例子:

如果文件内容如下

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

我想提取wordToExtract哪个是第一次出现。

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

我试过的例子之一

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

3 回答 3

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 
于 2013-10-06T12:41:17.423 回答
0

尝试以下正则表达式:

-d(.*?)-e

显然转义是必要的,还有开关 -o -P

于 2013-10-06T12:34:05.747 回答
0

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

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

它产生:

wordToExtract
于 2013-10-06T12:28:53.533 回答