我正在使用命令来搜索从 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"