![Egrep 역참조가 작동하지 않습니다.](https://linux55.com/image/84317/Egrep%20%EC%97%AD%EC%B0%B8%EC%A1%B0%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
아래 명령에서 첫 번째 캡처된 그룹을 참조해 보았습니다.
$ ls -lR | egrep 'd(rw(x|s)|rw-|r-(x|s)|-w(x|s)|r--|-w-|--(x|s))(rw(x|s)|rw-|r-(x|s)|-w(x|s)|r--|-w-|--(x|s))---'
drwxr-s--- 2 s9akhtar s9akhtar 4096 Feb 25 11:53 dir1
dr-xrws--- 2 s9akhtar s9akhtar 4096 Feb 25 11:53 dir2
dr-xrws--- 2 s9akhtar s9akhtar 4096 Feb 25 11:53 dir3
drwxrws--- 2 s9akhtar s9akhtar 4096 Feb 25 11:53 dir4
drwxrws--- 4 s9akhtar s9akhtar 4096 Feb 25 11:55 subdir
drwxrws--- 2 s9akhtar s9akhtar 4096 Feb 25 11:54 dir5
drwxrws--- 2 s9akhtar s9akhtar 4096 Feb 25 11:54 dir6
그래서 저는 다음과 같은 작업을 하고 싶습니다.
ls -lR | egrep "d(rw(x|s)|rw-|r-(x|s)|-w(x|s)|r--|-w-|--(x|s))\1---"
하지만 결과는 비어있습니다
첫 번째 캡처 그룹의 역참조 중괄호가 작동하지 않는 이유:
(rw(x|s)|rw-|r-(x|s)|-w(x|s)|r--|-w-|--(x|s))
답변1
네가 원한다면패턴을 반복하세요{2}
대신 계산 접미사를 사용해야 합니다 \1
. 반복됩니다.패턴과 일치하는 첫 번째 문자열. 노력하다:
egrep '^d(rw(x|s)|rw-|r-(x|s)|-w(x|s)|r--|-w-|--(x|s)){2}---'
이를 다음과 같이 단순화할 수 있습니다.
egrep '^d(r[w-][xs-]|-w[xs-]|--[xs]){2}---'
답변2
이해하기 어려운 정규식입니다. 나는 그것을 유지해야 하는 다음 불쌍한 바보를 위해 잘 문서화되기를 바랍니다.
디지털 권한으로 수행할 수 있는 작업은 다음과 같습니다.
find . -type d -printf "%m %p\n" | filter somehow based on the permissions