脚本 /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 脚本,但如果不正确理解它应该完成的任务,就很难编写替代品。