簡體   English   中英

從ls w / sed的長輸出中刪除權限?

[英]Remove permissions from long output of ls w/ sed?

我正在嘗試使用正則表達式從ls -l刪除權限。

ls -l | sed '/^.([rwx]{9}) //'

它不起作用,我不確定為什么嗎?

Posix sed僅允許“基本”正則表達式,其中不包含{n,m}重復語法(除其他外)。 sed的GNU版本(隨大多數linux發行版一起分發)如果與-r選項一起使用,則啟用“擴展”(即正常)正則表達式。 為此,BSD sed (例如,在Mac OS X上)使用-E標志。

因此,在Linux上,您可以編寫:

ls -l | sed -r 's/^.[-rwx]{9} //'

[注1]

但是使用標准cut實用程序執行此操作會容易得多:

ls -l | cut -c12-

從第12個字符開始打印每行的字符。

或者,由於Posix允許ls -l列表的第一個字段為11個字符而不是10個字符,因此您可以使用cut來輸出從第二個字段開始的所有字段,並使用空格字符作為分隔符(需要指定此字段是因為cut默認定界符為tab):

ls -l | cut -d' ' -f2-

[1]此正則表達式過於嚴格:它將無法匹配setuid / setgid可執行文件,受限刪除目錄(例如/tmp )和某些異常的模式。 更准確的可能是^.[-rwxsStT]{9}^.([-r][-w][-xsStT]){3} 但是請注意,Posix允許每個組中的三個字符中的最后一個成為其他字符,並且還允許在模式組的末尾附加一個“替代訪問方法標志”。

對於這些情況,我喜歡將cut與字段定界符一起使用。

ls -l | cut -d ' ' -f2-

僅BASH解決方案總是好的。

while read _ line; do echo $line; done < <(ls -l)

awk

ls -l | awk '{print substr($0, index($0,$2))}'

ruby

ls -l | ruby -ane 'puts $F[1..$F.count].join(" ")'

每個從第二個字段開始打印每一行。

嘗試使用“剪切”命令。

ls -l |cut -d ' ' -f2-

-d指定使用的字段定界符。 這是一個“空間”。 -f之后的2指定從第二列開始。 “-”表示切入行尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM