8

基本的に私はls -laコマンドから行を取得します:

-rw-r--r--  13 ondrejodchazel  staff  442 Dec 10 16:23 some_file

ファイルのサイズ(442)を取得したい。cut私はコマンドを試しsedましたが、失敗しました。/ +/基本的なUNIXツール(cut、sed、awk ...)だけを使用して、区切り文字がregexpであるstdinから特定の列を取得するにはどうすればよいですか?

4

3 に答える 3

17

でそれを行いたい場合は、をサポートしていないため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 '[^ ]+$'
于 2012-12-10T16:56:24.003 に答える
5

出力の解析lsはあなたが思っているより難しいです。stat代わりになどの専用ツールを使用してください。

size=$(stat -c '%s' some_file)

数字が千の区切り記号としてスペースを使用する場合、 1つの方法ls -la some_file | awk '{print $5}'が壊れることがあります(これは一部のヨーロッパのロケールでは一般的です)。

ls(1)の出力を解析してはいけない理由も参照してください。

于 2012-12-10T16:22:26.980 に答える
2

出力をパイプします:

awk '{print $5}'

または、次のようなstatコマンドを使用することをお勧めします(Macの場合):

stat -f "%z" yourFile

または(Linuxの場合)

stat -c "%s" yourFile

ファイルのサイズをバイト単位で出力します。

于 2012-12-10T16:23:03.423 に答える