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

그렇다면 위에서 사용한 첫 번째 찾기 명령을 사용하여 각 파일에 대해 이를 어떻게 달성합니까?

말해주세요. 감사해요.

답변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"

관련 정보