String 列出文件名,不包括使用grep的两个字符串
我有一个文件夹,里面有很多wsdl。我想找出哪些WSDL不包含字符串“binding style=“document”“”binding style=“rpc”。 我已经尝试过遵循grep命令,但它不起作用,我猜是因为它检查与与否String 列出文件名,不包括使用grep的两个字符串,string,bash,grep,String,Bash,Grep,我有一个文件夹,里面有很多wsdl。我想找出哪些WSDL不包含字符串“binding style=“document”“”binding style=“rpc”。 我已经尝试过遵循grep命令,但它不起作用,我猜是因为它检查与与否 grep -Ev 'binding style=\"rpc\"|binding style=\"document\"' -l folder/* | cut -f2 -d'/' 使用单引号时,不必引用“: 要使文件不包含模式,请执行以下操作: awk 'BEGIN {
grep -Ev 'binding style=\"rpc\"|binding style=\"document\"' -l folder/* | cut -f2 -d'/'
使用单引号时,不必引用
“
:
要使文件不包含模式,请执行以下操作:
awk 'BEGIN {
for (i = 1; i < ARGC; ++i) {
m = 0
file = ARGV[i]
while ((getline line < file) > 0) {
if (line ~ /binding style="rp"|binding style="document"/) {
m = 1
break
}
}
close(file)
if (m == 0) {
print file
}
}
exit
}' folder/* | cut -f2 -d'/'
awk'开始{
对于(i=1;i0){
if(line~/binding style=“rp”| binding style=“document”/{
m=1
打破
}
}
关闭(文件)
如果(m==0){
打印文件
}
}
出口
}'文件夹/*|剪切-f2-d'/'
单行命令:
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){print file}}exit}' folder/* | cut -f2 -d'/'
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){sub(/.*\//,"",file);print file}}exit}' folder/*
awk'BEGIN{for(i=1;i0){
if(line~/binding style=“rp”| binding style=“document”/{
m=1
打破
}
}
关闭(文件)
如果(m==0){
子(/.\/,“”,文件)
打印文件
}
}
出口
}'文件夹/*
您不再需要使用cut
单行命令:
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){print file}}exit}' folder/* | cut -f2 -d'/'
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){sub(/.*\//,"",file);print file}}exit}' folder/*
awk'BEGIN{for(i=1;i使用单引号时,您不必引用”
:
要使文件不包含模式,请执行以下操作:
awk 'BEGIN {
for (i = 1; i < ARGC; ++i) {
m = 0
file = ARGV[i]
while ((getline line < file) > 0) {
if (line ~ /binding style="rp"|binding style="document"/) {
m = 1
break
}
}
close(file)
if (m == 0) {
print file
}
}
exit
}' folder/* | cut -f2 -d'/'
awk'开始{
对于(i=1;i0){
if(line~/binding style=“rp”| binding style=“document”/{
m=1
打破
}
}
关闭(文件)
如果(m==0){
打印文件
}
}
出口
}'文件夹/*|剪切-f2-d'/'
单行命令:
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){print file}}exit}' folder/* | cut -f2 -d'/'
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){sub(/.*\//,"",file);print file}}exit}' folder/*
awk'BEGIN{for(i=1;i0){
if(line~/binding style=“rp”| binding style=“document”/{
m=1
打破
}
}
关闭(文件)
如果(m==0){
子(/.\/,“”,文件)
打印文件
}
}
出口
}'文件夹/*
您不再需要使用cut
单行命令:
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){print file}}exit}' folder/* | cut -f2 -d'/'
awk 'BEGIN{for(i=1;i<ARGC;++i){m=0;file=ARGV[i];while((getline line<file)>0){if(line ~ /binding style="rp"|binding style="document"/){m=1;break}}close(file);if(m==0){sub(/.*\//,"",file);print file}}exit}' folder/*
awk'BEGIN{for(i=1;i您可以使用awk
而不是grep
,因为它允许您将正则表达式匹配与逻辑运算符组合:
要打印具有两个匹配项的行,请执行以下操作:
$ awk '$0~s1 && $0~s2' s1='binding style="rpc"' s2='binding style="document"'
要打印至少有一个匹配项的行,请执行以下操作:
$ awk '$0~s1 || $0~s2' s1='binding style="rpc"' s2='binding style="document"'
$ awk '$0~s1 || $0~s2{print FILENAME;nextfile}'
打印既不匹配也不匹配的行的步骤
$ awk '!($0~s1 || $0~s2)' s1='binding style="rpc"' s2='binding style="document"'
要仅打印文件名,您可以使用GNU awk
对单行中包含两个匹配项的文件执行以下操作:
$ awk '$0~s1 && $0~s2{print FILENAME;nextfile}'
至少包含一个匹配项的文件:
$ awk '$0~s1 || $0~s2' s1='binding style="rpc"' s2='binding style="document"'
$ awk '$0~s1 || $0~s2{print FILENAME;nextfile}'
跨任意行包含两个匹配项的文件:
$ awk '$0~s1{f1=1} $0~s2{f2=1}ENDFILE{if (f1&&f2) print FILENAME;f1=f2=0}'
不包含匹配项的文件:
$ awk '$0~s1{f1=1} $0~s2{f2=1}ENDFILE{if (!(f1||f2)) print FILENAME;f1=f2=0}'
您仍然需要添加s1
和s2
的定义,我只是为了保持行的简短易读性而省略了它们。我选择在脚本之后定义s1
和s2
的原因是字符串包含双引号,这样做可以避免任何令人讨厌的转义。如果您有匹配项而没有你可以做些简单的事情:
$ awk '/foo/ && /bar/{print FILENAME;nextfile}' folder/* | basename
对于字符串foo
和bar
等…您可以使用awk
而不是grep
,因为它允许您将正则表达式匹配与逻辑运算符相结合:
要打印具有两个匹配项的行,请执行以下操作:
$ awk '$0~s1 && $0~s2' s1='binding style="rpc"' s2='binding style="document"'
要打印至少有一个匹配项的行,请执行以下操作:
$ awk '$0~s1 || $0~s2' s1='binding style="rpc"' s2='binding style="document"'
$ awk '$0~s1 || $0~s2{print FILENAME;nextfile}'
打印既不匹配也不匹配的行的步骤
$ awk '!($0~s1 || $0~s2)' s1='binding style="rpc"' s2='binding style="document"'
要仅打印文件名,您可以使用GNU awk
对单行中包含两个匹配项的文件执行以下操作:
$ awk '$0~s1 && $0~s2{print FILENAME;nextfile}'
至少包含一个匹配项的文件:
$ awk '$0~s1 || $0~s2' s1='binding style="rpc"' s2='binding style="document"'
$ awk '$0~s1 || $0~s2{print FILENAME;nextfile}'
跨任意行包含两个匹配项的文件:
$ awk '$0~s1{f1=1} $0~s2{f2=1}ENDFILE{if (f1&&f2) print FILENAME;f1=f2=0}'
不包含匹配项的文件:
$ awk '$0~s1{f1=1} $0~s2{f2=1}ENDFILE{if (!(f1||f2)) print FILENAME;f1=f2=0}'
您仍然需要添加s1
和s2
的定义,我只是为了保持行的简短易读性而省略了它们。我选择在脚本之后定义s1
和s2
的原因是字符串包含双引号,这样做可以避免任何令人讨厌的转义。如果您有匹配项而没有你可以做些简单的事情:
$ awk '/foo/ && /bar/{print FILENAME;nextfile}' folder/* | basename
对于字符串foo
和bar
等…这将打印不包含字符串的所有文件的文件名binding style=“rp”
或binding style=“document”
perl-le'for$f(@ARGV){$p=0;open($fh,$f);while(){$p++if(/binding style=“rp”| binding style=“document”/)}打印$f,除非$p;}*
我假设您需要文件名这将打印不包含字符串的所有文件的文件名binding style=“rp”
或binding style=“document”
perl-le'for$f(@ARGV){$p=0;open($fh,$f);while(){$p++if(/binding style=“rp”| binding style=“document”/)}打印$f,除非$p;}*
我假设您希望文件名grep“a | b”
是一个OR。若要获取AND,请执行grep a | grep b
。是否可以通过指定文件夹来实现这一点?grep-v a folder/*| grep-lv b
应该实现。关于和的逻辑是错误的。如果要排除行,则OR解决方案已经正确,因为!(A | B)
=(!A&&!B)
grep“A | B”
是一个OR。若要获取AND,请执行grep A | grep B
。是否可以通过指定文件夹来执行此操作?grep-v A folder/*| grep-lv B
应该执行此操作。关于和的逻辑是错误的。如果要排除行,则OR解决方案已经正确,因为!(A | B)
=(!A&&!B)
如何指定文件夹?与您使用grep
的方法相同,通过使用shell globings传入所有文件awk'$0~s1&$0~s2's1='binding style=“rpc”'s2='binding style=“document”'folder/*
。侧边提示:命令basename
从文件中删除前导目录,以便您可以用basename
替换cut-f2-d'/'