![Unix에서 특정 문자열에 대한 파일을 검색한 다음 해당 파일에서 다른 문자열 세트를 검색하고 파일 속성을 인쇄합니다.](https://linux55.com/image/59553/Unix%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%20%EB%8C%80%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%9C%20%EB%8B%A4%EC%9D%8C%20%ED%95%B4%EB%8B%B9%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%84%B8%ED%8A%B8%EB%A5%BC%20%EA%B2%80%EC%83%89%ED%95%98%EA%B3%A0%20%ED%8C%8C%EC%9D%BC%20%EC%86%8D%EC%84%B1%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
나는 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"