쉘 스크립트를 작성 중인데 문제가 발생했습니다. 예를 들어 디렉터리 및 파일 정보 목록이 포함된 파일이 있는 경우:
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:]]*$
-E
grep
-v
-q
grep
일치하는 항목이 있으면 grep
0으로 종료되고, 일치하는 항목이 없으면 0이 아닌 값으로 종료됩니다. 나는 쉘을 사용하여 종료 값을 if
확인 하고 grep
이에 따라 해당 true
/ 문자열을 인쇄합니다 false
.
답변2
다음을 사용해 볼 수 있습니다 grep(1)
.if-statement
if grep -Evq '^(home|dev\.dump).*' file.txt ; then echo false; fi