Awk 查找不包含小写字母的文件列表
尝试了几十次迭代,但似乎找不到正确的组合。我正在使用find创建子目录和文件的列表。我想省略任何包含小写字符的文件名。我正在将输出传输到awk以进行进一步处理,因此如果在那里更容易,那就好了。我(分别)尝试了find和awk find。我使用的是Solaris 10 Unix,如果这有什么区别的话 输入文件列表:Awk 查找不包含小写字母的文件列表,awk,find,solaris,Awk,Find,Solaris,尝试了几十次迭代,但似乎找不到正确的组合。我正在使用find创建子目录和文件的列表。我想省略任何包含小写字符的文件名。我正在将输出传输到awk以进行进一步处理,因此如果在那里更容易,那就好了。我(分别)尝试了find和awk find。我使用的是Solaris 10 Unix,如果这有什么区别的话 输入文件列表: FOO/BAR.TXT FOO/bar.TXT FOO/BAT.TXT BAZ/BAR.TXT BAZ/baz.TXT 期望输出 FOO/BAR.TXT FOO/BAT.TXT BA
FOO/BAR.TXT
FOO/bar.TXT
FOO/BAT.TXT
BAZ/BAR.TXT
BAZ/baz.TXT
期望输出
FOO/BAR.TXT
FOO/BAT.TXT
BAZ/BAR.TXT
My find包含其他排除项,仅显示示例
find ! \( -name 'FRED*' -o \
-name '*JONES' -o \
-name '*[a-z]8' \)
我还尝试将小写否定词移动到一个nawk查找,例如:
find ! \( -name 'FRED*' -o \
-name '*JONES' \)
| nawk -F'/' '!/a-z/ {print $2}'
我尝试的每一次迭代要么不给我任何输出,要么全部输出,包括带有小写字符的文件名
有任何帮助非常感谢。
让我们考虑一个带有这些文件的目录:
$ find . -type f
./FOO/BAT.TXT
./FOO/bar.TXT
./FOO/BAR.TXT
./BAZ/BAR.TXT
./BAZ/baz.TXT
要排除名称中包含一个或多个小写字符的所有文件,请执行以下操作:
$ find . -regextype egrep -type f -regex '[^[:lower:]]*'
./FOO/BAT.TXT
./FOO/BAR.TXT
./BAZ/BAR.TXT
注:
[:lower::
是匹配任何小写字符的POSIX正则表达式。
这是安全的<代码>[^[:lower:]匹配除小写字母以外的任何字符<代码>[^[:lower:][]*匹配不包含小写字符的任何字符序列-regex
将此regex应用于整个路径,并坚持它从头到尾匹配,就像它是^[^[:lower:]*$
一样egrep
样式如果目录名包含小写字母,但文件名不包含小写字母,例如
foo/BAR.TXT
,该怎么办?AWK中的字符范围写在代码> [AZ] < /代码>,就像您在<代码>查找< /代码>中所使用的,BTW.还考虑切换到/UR/XPG4/BI/AWK,而不是NaWK,因为NWK是非常旧的和PrimePOX(这就是为什么您需要使用<代码> [AZ] < /代码>而不是<代码> [[::下:] /<代码>),而/UR/XPG4/BI/AWK更现代和[几乎]。POSIX.find.|grep-v\[a-z\]
不要排除-name'*[a-z]8'
,而是尝试-name'*[a-z]*'