基本的に私はls -la
コマンドから行を取得します:
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
ファイルのサイズ(442)を取得したい。cut
私はコマンドを試しsed
ましたが、失敗しました。/ +/
基本的なUNIXツール(cut、sed、awk ...)だけを使用して、区切り文字がregexpであるstdinから特定の列を取得するにはどうすればよいですか?
基本的に私はls -la
コマンドから行を取得します:
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
ファイルのサイズ(442)を取得したい。cut
私はコマンドを試しsed
ましたが、失敗しました。/ +/
基本的なUNIXツール(cut、sed、awk ...)だけを使用して、区切り文字がregexpであるstdinから特定の列を取得するにはどうすればよいですか?
でそれを行いたい場合は、をサポートしていないため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)
数字が千の区切り記号としてスペースを使用する場合、 1つの方法ls -la some_file | awk '{print $5}'
が壊れることがあります(これは一部のヨーロッパのロケールでは一般的です)。
ls(1)の出力を解析してはいけない理由も参照してください。
出力をパイプします:
awk '{print $5}'
または、次のようなstatコマンドを使用することをお勧めします(Macの場合):
stat -f "%z" yourFile
または(Linuxの場合)
stat -c "%s" yourFile
ファイルのサイズをバイト単位で出力します。