선택된 일부 디렉토리를 제외한 디렉토리 식별

선택된 일부 디렉토리를 제외한 디렉토리 식별

쉘 스크립트를 작성 중인데 문제가 발생했습니다. 예를 들어 디렉터리 및 파일 정보 목록이 포함된 파일이 있는 경우:

home/svdev/src/lib
home/dev/project/doc
home/server/etc
dev.dump/trunk/src
dev.dump/src/etc
etc/hosts
template.txt
admin/releases/tables

다음으로 끝나지 않는 디렉터리나 파일이 있는지 확인하고 싶습니다.그리고개발 덤프. 따라서 주어진 데이터에 대해 마지막 세 항목이 디렉터리 기준과 일치하므로 다음을 얻어야 합니다.잘못된내 출력으로

답변1

다음을 위해 사용할 수 있습니다 grep:

$ cat good
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc
$

$ cat bad
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc

etc/hosts
template.txt
admin/releases/tables
$

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' good; then echo false; else echo true; fi
true

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' bad; then echo false; else echo true; fi
false

grep내가 사용하는 경우 이는 " home/( )으로 시작하거나 dev.dump/( )로 시작하는 줄 ^home/|^dev\.dump/|^[[:space:]]*$검색 " 또는 선택적으로 공백 문자( )가 포함된 빈 줄을 검색하는 것을 의미합니다. 이 옵션을 사용하면 패턴이 확장 정규식으로 적용됩니다. 이 옵션은 일치 항목을 반전시켜 패턴과 일치하지 않는 행과 일치시킵니다. "좋은" 파일에는 반전된 패턴과 일치하는 줄이 없고, "나쁜" 파일에는 줄이 있습니다. 이 옵션을 사용하면 출력이 억제됩니다.^|^|^[[:space:]]*$-Egrep-v-qgrep

일치하는 항목이 있으면 grep0으로 종료되고, 일치하는 항목이 없으면 0이 아닌 값으로 종료됩니다. 나는 쉘을 사용하여 종료 값을 if확인 하고 grep이에 따라 해당 true/ 문자열을 인쇄합니다 false.

답변2

다음을 사용해 볼 수 있습니다 grep(1).if-statement

if grep -Evq '^(home|dev\.dump).*' file.txt ; then echo false; fi

관련 정보