如果要在输出中存在两个字符串,我想查找它们,然后通过管道将它们作为下一个命令的参数传递。
例如:
m_fCollisionTime
但我不知道如何实现上述目标。
我必须检查100个文件并删除其中包含这两个字符串的文件。如果有人存在,那么我不想删除文件。
答案 0 :(得分:2)
如果您只想删除两个匹配项的文件,则awk
是一种成熟的编程语言,可以提供一个独立检查标志的表达式,比{{1} }(它将根据是否找到 any 匹配项,而不是是否匹配给定的 all 表达式来修改退出状态)。
grep
等效于string1="first regex"
string2="second regex"
for ((x=1; x<=100; x++)); do
file="log$x.txt"
awk -v string1="$string1" -v string2="$string2" '
BEGIN { found1=0; found2=0; }
$0 ~ string1 { found1=1; }
$0 ~ string2 { found2=1; }
END { exit(!(found1 && found2)) }
' "$file" && rm -f -- "$file"
done
的效率要低得多,因为它必须读取每个文件两次:
grep
答案 1 :(得分:1)
您可以使用find
进行此操作:
find . -name 'log*.txt' -exec grep -E 'string1' {} \; -exec grep -E 'string2' {} \; -exec rm {} \;
这将找到logN.txt
,grep表示字符串1,如果匹配则grep表示字符串2,如果匹配则删除文件。
根据下面的注释,如果只想在当前目录中查找文件,请添加-maxdepth 1
。
答案 2 :(得分:0)
使用GNU Parallel:
parallel 'grep string1 log{}.txt && grep string2 log{}.txt && rm log{}.txt' ::: {1..100}
如果您要查看所有log * .txt文件,那么它会更短:
parallel 'grep string1 {} && grep string2 {} && rm {}' ::: log*.txt