私は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
それでは、上記で最初に使用した検索コマンドを使用して各ファイルに対してこれをどのように達成しますか?
教えてください。ありがとうございます。
答え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"