【问题标题】:bash: setting tab field separator with variablebash:使用变量设置选项卡字段分隔符
【发布时间】:2016-06-26 05:01:25
【问题描述】:

一些 bash 工具,例如 sort、join、cut(都是 coreutils?)需要以一种特殊的方式为制表符传递字段分隔符:sort -t $'\t' ...。这里有很多问题可以解决这种行为。

我的问题是我试图将字段分隔符作为变量传递,例如:

SEP="\t"
sort -t $SEP ...

使用普通字符可以,但不能使用制表符。我尝试了一些变体,但它们都不起作用。如何做到这一点?

【问题讨论】:

    标签: bash unix tabs gnu-coreutils


    【解决方案1】:

    使用ANSI-C quoting声明它:

    sep=$'\t'
    

    并将其称为"$sep",引号对于保留字面意义很重要:

    sort -t "$sep" file.txt
    

    示例:

    $ cat file.txt 
    foo     bar
    spam    egg
    abc     def
    
    $ sep=$'\t'
    
    $ sort -t $sep file.txt 
    sort: multi-character tab ‘file.txt’
    
    $ sort -t "$sep" file.txt 
    abc     def
    foo     bar
    spam    egg
    

    还要注意,为了消除环境变量的歧义,我使用小写字符作为变量名,除非您有充分的理由也应该这样做。

    【讨论】:

    • 我以为我尝试了所有组合,但不知何故错过了那个。感谢您的及时回复!
    • @burger 很高兴我能帮上忙 :)
    【解决方案2】:

    在按 [TAB] 之前使用键 [CONTROL]+[V] 来引入制表符。

    echo "a b   c" |cut -d" " -f2
    

    b

    复制粘贴代码时要小心,因为选项卡可能会丢失,因为实际上它们在这篇文章中丢失了:-)

    【讨论】:

    • 为什么在没有 cmets 的情况下投反对票?在源代码中插入 Tab 是有效的。
    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2014-12-20
    • 2011-09-21
    • 2015-06-03
    • 1970-01-01
    • 2013-12-10
    • 2018-03-24
    相关资源
    最近更新 更多