【问题标题】:bash, extract string before a colonbash,在冒号前提取字符串
【发布时间】:2013-12-19 07:55:03
【问题描述】:

如果我有一个包含这样行的文件

/some/random/file.csv:some string
/some/random/file2.csv:some string2

有没有办法得到一个只有冒号前第一部分的文件,例如

/some/random/file.csv
/some/random/file2.csv

我宁愿只使用 bash 一个衬里,但 perl 或 python 也可以。

【问题讨论】:

    标签: regex string bash sed substring


    【解决方案1】:

    这对我有用,你们可以试试

    INPUT='ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash'
    SUBSTRING=$(echo $INPUT| cut -d: -f1)
    echo $SUBSTRING
    

    【讨论】:

      【解决方案2】:

      另一种纯 BASH 方式:

      > s='/some/random/file.csv:some string'
      > echo "${s%%:*}"
      /some/random/file.csv
      

      【讨论】:

      • 如果变量中有多个冒号,这将无法按预期工作,因为它会在最后一次出现而不是预期的第一次出现...使用 ${s%% :*} 改为
      • 没错%% 更适合。现在正在编辑。
      • 对我来说可以一次只从单词列表中删除想要的信息,格式为 [info]_mapping.json。 echo "${s%%_mapping.json}"
      【解决方案3】:

      另一个纯 Bash 解决方案:

      while IFS=':' read a b ; do
        echo "$a"
      done < "$infile" > "$outfile"
      

      【讨论】:

      • +1(稍作修改);这是从bash 中的文件中读取分隔文本的标准方法。
      【解决方案4】:

      这个问题被问了很多次,以至于一个超过 1000 点的用户问这个有点奇怪
      但只是为了展示另一种方法:

      echo "/some/random/file.csv:some string" | awk '{sub(/:.*/,x)}1'
      /some/random/file.csv
      

      【讨论】:

        【解决方案5】:

        在纯 bash 中试试这个:

        FRED="/some/random/file.csv:some string"
        a=${FRED%:*}
        echo $a
        

        Here 是一些有帮助的文档。

        【讨论】:

        • 非常感谢的答案
        • 请注意,单个% 仅提取到第一个冒号;使用%% 提取到最后一个冒号。
        • 其实恰恰相反:%% 提取到第一个,% 提取到最后。
        【解决方案6】:
        cut -d: -f1
        

        awk -F: '{print $1}'
        

        sed 's/:.*//'
        

        【讨论】:

        • 这正是我只需要列出在 git diff 中以特定模式开始更改的文件夹的名称
        • 大声笑,我是个忘记 cut 的白痴,只花了 10 分钟尝试做这个正则表达式,然后当我读到你的答案时,我真的是面对面,谢谢。
        猜你喜欢
        • 2013-03-05
        • 1970-01-01
        • 2019-11-19
        • 2022-10-19
        • 2015-06-06
        • 2016-04-20
        • 1970-01-01
        • 2021-10-31
        相关资源
        最近更新 更多