我有一个包含多行的文件,我想在-d
和-e
之间提取单词,如果文件有多个出现,第一个就没问题。
示例:
如果文件内容如下
someText -d wordToExtract -e someOtherWord and so on, -d Hello -e
我想提取第一次出现的wordToExtract
。
我尝试使用grep
和sed
命令但无法实现,因为我是unix
的新手。任何帮助表示赞赏。
我试过的一个例子
grep -o -P '(?<=\\-d).*(?=\\-i)' fileName
答案 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)
使用perl的解决方案。我更喜欢sed,因为它有非greddy量词和grep,因为它可以避免每行多个匹配:
perl -ne 'm/-d\s*(.*?)\s*-e/ && print "$1\n"' infile
它产生:
wordToExtract
答案 2 :(得分:0)
尝试以下正则表达式:
-d(.*?)-e
显然必须转义,以及开关-o -P