基本上我得到線從ls -la
命令:如何獲得與正則表達式的分隔符n列
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
,並希望得到的文件(442)的大小。我試過cut
和sed
命令,但沒有成功。只使用基本的UNIX工具(cut,sed,awk ...),我如何從stdin獲取特定列,其中分隔符是/ +/
regexp?
基本上我得到線從ls -la
命令:如何獲得與正則表達式的分隔符n列
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
,並希望得到的文件(442)的大小。我試過cut
和sed
命令,但沒有成功。只使用基本的UNIX工具(cut,sed,awk ...),我如何從stdin獲取特定列,其中分隔符是/ +/
regexp?
如果您想要使用cut
,您需要首先擠壓空間(tr -s ' '
),因爲cut
不支持+
。這應該工作:
ls -la | tr -s ' ' | cut -d' ' -f 5
它與sed
這樣做時(GNU SED)有點更多的工作:
ls -la | sed -r 's/([^ ]+ +){4}([^ ]+).*/\2/'
略超過指衝,如果你使用grep替代(GNU的grep):
ls -la | grep -Eo '[^ ]+(+[^ ]+){4}' | grep -Eo '[^ ]+$'
解析ls
輸出比你想象的要困難。改用專用工具,如stat
。
size=$(stat -c '%s' some_file)
一種方式ls -la some_file | awk '{print $5}'
可以打破的,如果號碼使用空格作爲千位分隔符(這是常見於一些歐洲語言環境)。請參閱Why You Shouldn't Parse the Output of ls(1)。
謝謝,你的回答很好,但解析ls的輸出是比較實例的用法,然後是實際的用法。 – Ondra
管你的輸出和:
awk '{print $5}'
甚至更好我們使用stat命令是這樣的(在Mac):
stat -f "%z" yourFile
或(在Linux上)
stat -c "%s" yourFile
那會以字節爲單位輸出文件的大小。
+1爲'sed |減少'流量。迄今爲止,用於柱式維修的最靈活,最強大,最簡潔的技術。 – gepoch