나는 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"