【问题标题】:How to use cut with delimiter " {##} "?如何使用带有分隔符“ {##} ”的剪切?
【发布时间】:2013-07-05 11:26:44
【问题描述】:

我有一个由{##} 分隔的文件。我试过了:

$ cat infile | cut -d" {##} " -f1 | grep -w "word" 

但我无法正确使用 cut 命令。如何转义特殊字符(例如 cut 中的 !@#$%^&*(){}[]

【问题讨论】:

    标签: bash shell grep cut cat


    【解决方案1】:

    首先cut 需要单字符分隔符(-d 选项)。所以字符串不起作用,您需要其他工具来准备输入,让我们使用sed

    其次,您应该使用单引号 ' 而不是双引号 ",这样它就不会被 shell 解释。

    如果我们可以使用| 作为分隔符,这将起作用。

    cat infile | sed 's/ {##} /|/g' | cut -d'|' -f1 | grep -w 'word'
    

    您可以将分隔符| 替换为输入文件中从不出现的字符。


    您可以通过在它们前面加上反斜杠 \ 或将它们放在不被解释的单引号 ' 中来转义 shell 字符。

    【讨论】:

      【解决方案2】:

      awk 也可以使用多字符分隔符:

      awk -F ' {##} ' '$1 ~ /\<word\>/ {print $1}' infile
      

      【讨论】:

        【解决方案3】:

        使用下面的命令代替 cut 和 grep:

        perl -F"{##}" -lane 'print $F[0] if($F[0]=~/\bword\b/)' infile
        

        【讨论】:

        • 你的意思是-F' {##} '
        • 你还希望/\bword\b/grep -w对应
        • 尽管我很喜欢perl,但我必须通过从python 调用bash 命令来作弊,所以使用python 调用perl 似乎很奇怪。不过,我必须说迭代在 perl 上运行得更快 =)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-29
        • 2022-01-26
        • 2014-07-03
        • 2013-11-18
        • 2015-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多