脚本 /bin/bash 扩充太长并且 grep 部分在查找中不起作用
Script /bin/bash augment too long and grep section not working in find
我正在尝试编写一个简单的脚本来查找文件中的字段是否为空,例如
x_Field=""
find /mnt/sdb1/*/*/ -name 'files.txt' -type f -follow -print0 {} \; | xargs -0 grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'
我认为该命令在没有 find 的情况下有效,但与 find 一起无效?
grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'
此外,当我完成这一半工作时,如果似乎我有太多文件要扫描,所以它会增加太长:-(
也很抱歉,我需要浏览数百个子文件夹,因此我使用了通配符
您的 find
命令有一些错误。
显然,/mnt/sdb1/*/*
扩展到一个列表,这对您的 shell 来说太长了。您可以将其替换为 /mnt/sdb1 -mindepth 2
(假设您希望避免在 sdb1
正下方的目录中找到任何内容)。
如果您有 -exec
选项,{} \;
会很有用,但您没有。
此外,grep | cut | awk
可以重构为单个 Awk 脚本,但如果不正确理解它应该完成的任务,就很难编写替代品。
我正在尝试编写一个简单的脚本来查找文件中的字段是否为空,例如 x_Field=""
find /mnt/sdb1/*/*/ -name 'files.txt' -type f -follow -print0 {} \; | xargs -0 grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'
我认为该命令在没有 find 的情况下有效,但与 find 一起无效?
grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1'
此外,当我完成这一半工作时,如果似乎我有太多文件要扫描,所以它会增加太长:-(
也很抱歉,我需要浏览数百个子文件夹,因此我使用了通配符
您的 find
命令有一些错误。
显然,/mnt/sdb1/*/*
扩展到一个列表,这对您的 shell 来说太长了。您可以将其替换为 /mnt/sdb1 -mindepth 2
(假设您希望避免在 sdb1
正下方的目录中找到任何内容)。
如果您有 -exec
选项,{} \;
会很有用,但您没有。
此外,grep | cut | awk
可以重构为单个 Awk 脚本,但如果不正确理解它应该完成的任务,就很难编写替代品。