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

関連情報