【发布时间】:2023-03-05 05:57:01
【问题描述】:
我有这个字符串;
4.0K /Server/mysql/backup/backup_mysql_ltr_20151006-131057.tar.gz
我只需要返回4.0K,但显然,这个数字可以是任何数字。我相信K 和/Server 之间有一个标签
任何想法如何完成。它将在 Mac OS X 和 Ubuntu 上的终端/bash 命令中使用。
【问题讨论】:
我有这个字符串;
4.0K /Server/mysql/backup/backup_mysql_ltr_20151006-131057.tar.gz
我只需要返回4.0K,但显然,这个数字可以是任何数字。我相信K 和/Server 之间有一个标签
任何想法如何完成。它将在 Mac OS X 和 Ubuntu 上的终端/bash 命令中使用。
【问题讨论】:
<command that produces your output> | cut -f 1
如果这不是K 和/Server 之间的选项卡,那么
<command that produces your output> | cut -f 1 -d' '
【讨论】:
一种方法是只使用awk:
sz=$(echo "$string" | awk '{print $1}')
根据以下成绩单:
pax> string="4.0K /Server/blah_blah_blah.tar.gz"
pax> sz=$(echo "$string" | awk '{print $1}')
pax> echo $sz
4.0K
还有很多其他方法使用cut、sed、grep -o 等等(1) 但我通常使用awk,因为:
(1) 如:
sz=$(echo "$string" | cut -f1)
sz=$(echo "$string" | sed 's/\t.*$//')
sz=$(echo "$string" | grep -o $'^[^\t]*')
等等……
【讨论】:
s="4.0K /Server/mysql/backup/backup_mysql_ltr_20151006-131057.tar.gz"
x="${s// *}"
echo "$x"
输出:
4.0K【讨论】:
echo "${s//[[:space:]]*}",因为 OP 提到了标签
bash,所以这并不重要。这是一种不涉及启动另一个进程的好方法。