grep for keyword1keyword2,而不是keyword1texkeyword2-非常大的grep



我希望能够在我搜索的单词之间输出具有文本的内容,以获取精确的匹配结果。中间是输出的一部分。例如:

egrep -i "^cat|^dog" list.txt >> startswith.txt
egrep -i "home$|house$" startswith.txt >> final.txt

我希望这归还Cathome,Cathouse,Doghome,Doghouse的任何比赛;但不要返回cathasahome,catneedsahouse等。请注意,这些文件对我来说很大,可以通过每个组合说 ^Word1word2 $。

是否可以在Grep或Egrep中进行此操作。

使用一些分组指定图案的两个部分,锚点(^$)将适用于组。

$ cat list.txt 
cathome
cathouse
catindahouse
dogindahome
doghouse
doghome
$ egrep -i "^(dog|cat)(home|house)$" list.txt 
cathome
cathouse
doghouse
doghome

,您可以在Perl Regex模式下尝试相同的事情,并使用非捕获组(因为您不在乎捕获它们):

$ grep -Pi "^(?:dog|cat)(?:home|house)$" list.txt 

不知道这是否会有所作为,但尝试不会有任何伤害。

您没有提供任何样本输入或预期输出,因此这是一个未经测试的猜测,但这可能是您要寻找的:

awk '
BEGIN {
    split("cat dog",beg)
    split("home house",end)
    for (i in beg)
        for (j in end)
            matches[beg[i] end[j]]
}
tolower($0) in matches
' file

例如:

$ cat file
acathome
CatHome
catinhouse
CATHOUSE
doghomes
dogHOME
dogathouse
DOGhouse
$ awk '
BEGIN {
    split("cat dog",beg)
    split("home house",end)
    for (i in beg)
        for (j in end)
            matches[beg[i] end[j]]
}
tolower($0) in matches
' file
CatHome
CATHOUSE
dogHOME
DOGhouse

相关内容

  • 没有找到相关文章

最新更新