【问题标题】:Terminal/Bash - Return until tab终端/Bash - 返回直到选项卡
【发布时间】: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 命令中使用。

【问题讨论】:

    标签: regex bash terminal


    【解决方案1】:
    <command that produces your output> | cut -f 1
    

    如果这不是K/Server 之间的选项卡,那么

    <command that produces your output> | cut -f 1 -d' '
    

    【讨论】:

    • 选择这个作为答案是因为简单。
    【解决方案2】:

    一种方法是只使用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
    

    还有很多其他方法使用cutsedgrep -o 等等(1) 但我通常使用awk,因为:

    • 它很自然地适用于空格分隔的字段;和
    • 它倾向于允许比其他更强大的编程。

    (1) 如:

    sz=$(echo "$string" | cut -f1)
    sz=$(echo "$string" | sed 's/\t.*$//')
    sz=$(echo "$string" | grep -o $'^[^\t]*')
    

    等等……

    【讨论】:

    • 很好的答案!也感谢您 (1) 的替代选项!
    【解决方案3】:
    s="4.0K /Server/mysql/backup/backup_mysql_ltr_20151006-131057.tar.gz"
    x="${s// *}"
    echo "$x"
    

    输出:

    4.0K

    【讨论】:

    • 也许甚至 echo "${s//[[:space:]]*}",因为 OP 提到了标签
    • 感谢您提供这个有用的提示。
    • @Cyrus - 这个解决方案是否兼容所有 shell(sh、bash、ksh、csh、Tsh)?
    • @sras,这不太可能,但由于问题被标记为bash,所以这并不重要。这是一种不涉及启动另一个进程的好方法。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多