【问题标题】:Is it possible to use a string as a delimiter in unix cut command?是否可以在 unix cut 命令中使用字符串作为分隔符?
【发布时间】:2010-10-25 19:56:06
【问题描述】:

如果我想使用字符串作为分隔符来剪切文本列表,这可能吗? 例如,我有一个目录,其中一个 shell 脚本列表调用相同的 perl 脚本说

abc.pl

所以当我这样做时

$grep abc.pl * 

在那个目录中,它给了我以下结果

xyz.sh: abc.pl 1 2
xyz2.sh: abc.pl 2
mno.sh: abc.pl 3
pqr.sh: abc.pl 4 5

我基本上想要“abc.pl”之后的所有输出(检查现在正在传递给 perl 的范围参数)

当我尝试时

$grep abc.pl * | cut -d'abc.pl' -f2

$grep abc.pl * | cut -d'abc\.pl' -f2

它给了我

cut: invalid delimiter

当我读到 man for cut 时

delim 可以是多字节字符。

我在做什么/在这里解释错误?

【问题讨论】:

  • 对不起,格式让我纠正了上面几行,所以它们有意义......它给了我以下结果 xyz.sh: abc.pl 1 2 xyz2.sh: abc.pl 2 mno.sh: abc.pl 3 pqr.sh: abc.pl 4 5 ...当我尝试 $grep abc.pl * |剪切 -d'abc.pl' -f2 或 $grep abc.pl * | cut -d'abc.pl' -f2 它给了我 cut: invalid delimiter ...希望这次新行能正常工作:)
  • 不 :( 不知道为什么它没有显示输入的换行符 :(
  • 你的意思是使用零示例的手册页没有说清楚?

标签: unix cut utilities


【解决方案1】:

尝试使用它。

$grep abc.pl * | awk -F 'abc.pl' '{print $2}'

-F fs --field-separator fs 使用 fs 作为输入字段分隔符(FS 预定义变量的值)。

【讨论】:

    【解决方案2】:

    或者你可以试试 Ruby:

    grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last'
    

    【讨论】:

      【解决方案3】:

      $ grep abc.pl * |剪切 -d' ' -f3-999

      在这种情况下,只需使用空格字符作为分隔符。

      【讨论】:

      • 无需包含999 - 只需添加cut -d' ' -f3-
      【解决方案4】:

      当我阅读 man for cut 时,它声明 ... delim 可以是多字节字符。

      多字节,但只有一个字符,而不是字符串。

      canti:~$ ll | cut --delimiter="delim" -f 1,2
      cut: the delimiter must be a single character
      Try `cut --help' for more information.
      
      canti:~$ cut --version  
      cut (GNU coreutils) 5.97
      

      您只能将输出分隔符指定为字符串(在这种情况下无用):

       --output-delimiter=STRING                                                          
              use STRING as the output delimiter the default is to use the input delimiter
      

      【讨论】:

        【解决方案5】:

        为什么不使用grep abc.pl | awk '{print $3, $4}'

        【讨论】:

        • 没有真正按照我期望的方式工作,它会显示结果。它显示部分列表......我也很好奇我使用 cut 的方式有什么问题?
        • 我实际上从未使用过 cut。您的任务需要 awk 或 perl!
        • 酷...谢谢alamar ...但是我会给亚历克斯的回答提供正确的答案,因为他真的回答了我正在寻找的东西。我希望有一种方法可以选择两个答案......但它会导致许多其他问题。所以谢谢你的帮助。真的很感激:)
        • 没问题,我不关心得分的事情。
        • 很高兴知道......但如果其他人来寻找相同问题的答案,阅读这两个帖子将给出完整的解决方案。无论如何......假设如果他们的问题没有通过查看第一个回复来解决,他们也会查看其他回复:)
        猜你喜欢
        • 2019-02-28
        • 2010-10-23
        • 2012-12-28
        • 2016-05-03
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        相关资源
        最近更新 更多