Egrep 역참조가 작동하지 않습니다.

Egrep 역참조가 작동하지 않습니다.

아래 명령에서 첫 번째 캡처된 그룹을 참조해 보았습니다.

$ 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

관련 정보