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