Sed 如何提取以特定单词开头和结尾且不包含特定单词的模式

Sed 如何提取以特定单词开头和结尾且不包含特定单词的模式,sed,grep,Sed,Grep,我已经找过了,但还没有找到适合我的目的的东西 这是我的数据模式: query=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxbacteriaxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x

我已经找过了,但还没有找到适合我的目的的东西

这是我的数据模式:

query=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxbacteriaxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

query=yyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

query=zzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzbacteriazzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zbacteriazzzzzzzzzzzzzzzzzzzzzzzzzz
@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

.
.
.
我需要抓住的模式是

query=yyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
@

我知道
sed-n'/Query=/,/@/p'
应该抓住这个模式,但是我如何排除里面有
bacteria
这个词的模式呢

编辑:很抱歉让你对我的问题感到困惑。我给了你一个新的例子

编辑2:我再次编辑了我需要的图案。非常抱歉

这可以
sed'/query/!D{:a;N;/@/!ba;/bacteria/d;s/.*/}infle
感谢ctac_

这可能适用于您(GNU-sed):

使用
-n
打开seds-grep-like-nature。查找
查询
,然后追加更多行,直到其中一行包含
@
。在这些行中搜索细菌,如果没有找到,则打印它们

此解决方案是多行解决方案,其中始终有两行或多行。要使解决方案包含一个或多个,请使用:

sed -n '/query/{:a;/@/!{N;ba};/bacteria/!p}' file
你可以试试这个

sed '/^query/!d;:A;N;/\n$/!{$!bA};h;s/bacteria//;tB;x;b;:B;d' infile

你的问题是什么还不清楚。请发布一些您想要匹配/拒绝的简化模式。您需要获取的模式怎么可能包含一些显然不在输入数据中的内容?或者我不理解这两条数据的含义。请改进您的问题。你想要什么还不清楚。使用GNU grep的一些示例可能会很有帮助:
grep-Poz'^query=.*(\n.*?*bacteria.*(\n.*?***@.*)文件
我想这就是OP想要的:啊,又是我的错。我没有检查就急于编辑。每个模式的预期结果中的最后一个字应该停在
@
或包含
@
的行。非常感谢您的帮助。@ChooseElbunswansakul您必须更新您的问题Potong答案是最好的答案。你必须加上!在p之前。如果您想在末尾只保留@,可以尝试sed'/query/!D{:a;N;/@/!ba;/bacteria/d;s/.*/}填充您的代码工作!万分感谢
sed'/query/!D{:a;N;/@/!ba;/bacteria/d;s/.*/}infle
我试过了,但结果中仍然存在细菌。我需要拒绝含有
细菌的模式。你能给我其他建议吗?谢谢你的帮助。
sed -n '/query/{:a;/@/!{N;ba};/bacteria/!p}' file
sed '/^query/!d;:A;N;/\n$/!{$!bA};h;s/bacteria//;tB;x;b;:B;d' infile