0

我有一个名为 random.html 的文件,其中包含以下行(不是唯一的行):

blahblahblahblah random="whatever h45" blahblahblahblah

我只想得到任何东西,到目前为止我使用了以下内容:

egrep -o 'random="([a-z]*[A-Z]*[0-9]*[ ]*)+'

这给了我random="whatever h45

我不能egrep -o ="([a-z]*[A-Z]*[0-9]*[ ]*)+'一开始就使用,因为这不是我唯一的行,并且会有不需要的行,随机关键字对于区分目的很重要。我试图做一个双重 egrep -o 例如:

egrep -o 'random="([a-z]*[A-Z]*[0-9]*[ ]*)+' | egrep -o '="([a-z]*[A-Z]*[0-9]*[ ]*)+'

它会在哪里显示="whatever h45但不起作用。我做错了什么还是违法的?我不想使用任何花哨的东西或使用剪切。这应该是非常“基本”的。

4

3 回答 3

2

您也可以bash单独执行此操作:

while read -r; do
    [[ $REPLY =~ random=\"([a-zA-Z0-9]+) ]] || continue
    echo ${BASH_REMATCH[1]}
done < file.txt

如果您的版本grep支持 Perl 正则表达式,您可以使用回溯断言仅匹配后面的文本random="

grep -P -o '(?<=random=\")([a-zA-Z0-9]+)' file.txt
于 2013-02-17T16:14:46.760 回答
1

您只是使用了错误的工具,这在 awk 中是微不足道的。有多种解决方案,这里有一个:

$ cat file
blahblahblahblah random="whatever h45" blahblahblahblah

$ awk 'match($0,/random="([a-z]*[A-Z]*[0-9]*[ ]*)+/) { print substr($0,RSTART+8,RLENGTH-8) }' file
whatever h45

从您的问题中不清楚您是否想要whateverwhatever h45="whatever h45或打印字符串的其他部分,所以我只选择了我认为最有可能的那个。不管是什么,都是微不足道的...

顺便说一句,您的正则表达式似乎没有意义,我只是从您的问题中复制了它,以减轻您所拥有的与 awk 解决方案之间的对比。如果您用文字告诉我们它的含义,我们可以为您正确编写它,但我认为最有可能的是它应该是非双引号,例如:

$ awk 'match($0,/random="[^"]+/) { print substr($0,RSTART+8,RLENGTH-8) }' file
whatever h45
于 2013-02-17T11:31:33.680 回答
0

Perl 解决方案的完整性。

#% perl -n -e 'print $1, "\n" if m!random="(\S+)!' tt

whatever
whatever

tt在哪里

#% cat tt

blahblahblahblah random="whatever h45" blahblahblahblah
blahblahblahblah random="whatever h45" blahblahblahblah
于 2013-02-17T14:38:49.873 回答