在 Unix 中搜索文件中的给定字符串,然后在该文件中搜索另一组字符串并打印文件属性

在 Unix 中搜索文件中的给定字符串,然后在该文件中搜索另一组字符串并打印文件属性

我正在使用命令来搜索从 Unix 中给定目录开始的文件,以该字符串结尾*.sas 并包含该字符串的文件DB2。然后,我又想在结果文件集中搜索字符串DSN=,或者DATASRC=还打印包含这些字符串的行。这是我正在使用的 FINd 命令:

find '/shrproj/'  -type f -name '*.sas'  -exec  grep   -il 'DB2'  {} \;  2> /dev/null  |  xargs   egrep   -Ri  'DSN=|DATASRC='

这给了我想要的输出:

/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas:                   ,"DSN=%UPCASE(&the_database.)"
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas:                   ,"DSN=%UPCASE(&the_database.)"

但现在我还想按照上述结果打印文件的属性(使用 -ls 选项),即以下是我想要实现的目标:

/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas:                   ,"DSN=%UPCASE(&the_database.)"
/shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas:                   ,"DSN=%UPCASE(&the_database.)"
61522   19 -rwxrwsr-x  1 sas       sas          18546 Jun  2  2010 /shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas

上面最后一行中文件的属性与使用带 -ls 选项的 find 命令时相同。

 find /shrproj/files/stp_code/aea_aat_stp/icrv3/bin/macro/cnct_2_eaw.sas -ls

那么,我如何使用上面使用的第一个 Find 命令为每个文件实现此目的?

请告诉我。谢谢。

答案1

只是:

find '/shrproj/'  -type f -name '*.sas' \
    -exec  grep -iq 'DB2'  {} \; \
    -exec  grep -ie  DSN= -e DATASRC= {} \; \
    -ls

答案2

我建议类似这样的事情(不能一次性完成所有事情);-)

OLDIFS="$IFS"
IFS=$'\n'
for i in $(find '/shrproj/' -type f -name '*.sas'); do
 G1="$(grep -il 'DB2' "$i")"
 if [ -n "$G1" ]; then
  G2="$(egrep -Ri 'DSN=|DATASRC=' "$i")"
  if [ -n "$G2" ]; then
   echo "$G1"
   echo "$G2"
   ls -l "$i"
  fi
 fi
done
IFS="$OLDIFS"

相关内容