我有这个 grep 命令来查找具有匹配模式的文件。
grep -oiE 'pattern1|pattern2|pattern3|pattern4' *pattern_in_a_filename* | sort -u
Run Code Online (Sandbox Code Playgroud)
输出:
file_one:pattern1
file_two:pattern2
file_two:pattern3
Run Code Online (Sandbox Code Playgroud)
我想要的是pattern4像这个例子一样输出没有被发现的说法:
file_one:pattern1
file_two:pattern2
file_two:pattern3
pattern4 not found
Run Code Online (Sandbox Code Playgroud)
我正在制作成千上万种模式,并且必须尽快完成,因为这些是我们运营中所需的关键数据。
我想得到 B* 之后的数字,但不包括Y和它之后的数字。我试图使用我从朋友那里得到的这个命令,但它不起作用:
grep -oP 'B.\K[\w\s\d]' < tus.txt | sort -u
Run Code Online (Sandbox Code Playgroud)
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758895*4932764*B*4578873831221*Y*
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21759295*4932379*B*00082403*Y*2708332
Run Code Online (Sandbox Code Playgroud)
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403
Run Code Online (Sandbox Code Playgroud) 这是给定的文件集:
./20170524/18909-20170524182010-PBS74C2VTTCKBMKGQC7YUVEJ3U-362511-19614379.XFA.SOFS_EDI
./20170524/18909-20170524182009-PBS74C2VTTCKBMKGQC7YUVEJ3U-362514-19614381.XFA.SOFS_EDI
./20170524/18909-20170524182010-PBS74C2VTTCKBMKGQC7YUVEJ3U-362532-19614390.XFA.SOFS_EDI
./20170524/18909-20170524182009-PBS74C2VTTCKBMKGQC7YUVEJ3U-362503-19614371.XFA.SOFS_EDI
./20170524/18909-20170524182009-PBS74C2VTTCKBMKGQC7YUVEJ3U-362506-19614372.XFA.SOFS_EDI
Run Code Online (Sandbox Code Playgroud)
这是每个文件中的内容。他们有不同的AK9细分市场。像AK9*A、AK9*P、AK9*R或AK9*E。
ISA*00* *00* *SS*252649841464SS *01*12564486M *102453*1254*U*025402*21651681320*0*S*>~SS*SS*5648408456SS*0150158011S*20170228*1921*020151018*X*0210540~SS*997*008609070~AK1*SH*107405~AK2*856*362518~AK5*A~AK9*A*1*1*1~SE*6*008609070~GE*1*008604488~IEA*1*008602662~
Run Code Online (Sandbox Code Playgroud)
我正在寻找具有这种模式的文件:
AK9*P或AK9*R或AK9*E
我想找到一个使用多种模式的文件。
这是我的原始命令:但是键入时间很长并且xargs zgrep是多余的。想象一下,如果我有 10 个或更多的模式要输入?
find -mtime -$a -type f ! -name "*.bak*" | xargs zgrep -il "$b" | xargs zgrep -il "$c" | xargs zgrep -il "$d" | xargs zgrep -il 'ST.997' | sort -u
Run Code Online (Sandbox Code Playgroud)
我想要更少的字符来输入,例如:
find -mtime -$a -type f ! -name "*.bak*" | xargs zgrep -il "$b && $c && $d" | sort -u
Run Code Online (Sandbox Code Playgroud)
编辑:如果您注意到模式与$. 那是因为命令在脚本中,并且这些变量具有字符串/数字值。
我将使用它来改进我的脚本,尤其是它的运行时间。
我有这个file.txt包含这个列表。
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4f.j9u8fhjkszdnv.ckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf.43.4fj9u8fhjkszdnvckizfjh489.dfsdf
Run Code Online (Sandbox Code Playgroud)
我想要发生的是知道是否file.txt所有行都匹配我想要找到的模式。
例如,如果模式ACCEPTED匹配了file.txtthen 的所有行echo "All lines are Accepted"。
我认为grep对此有答案,但我仍在试验中,但仍然没有运气。
我想if...else有条件地使用它。
这是我的查找命令:
find -mtime -$a | xargs zgrep -il ''$b'' | xargs zgrep -il ''$c'' | xargs zgrep -il ''$d'' | xargs zgrep -il 'ST.997' | sort -u
Run Code Online (Sandbox Code Playgroud)
这是上述命令的示例输出:
example_file.dat.Z
example2_file.dat.Z
example2_file.dat.bak.1234567890.Z
example3_file.dat.Z
example3_file.dat.bak.Z
example4_file.dat.Z
example4_file.dat.bak.qwertyuiop.Z
Run Code Online (Sandbox Code Playgroud)
如您所见,它输出带有“.bak”扩展名的相同文件。我想要的是在运行脚本时排除/不显示该文件。像这个示例输出:
example_file.dat.Z
example2_file.dat.Z
example3_file.dat.Z
example4_file.dat.Z
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了。有时它是在 zip 文件中。