代码之家  ›  专栏  ›  技术社区  ›  av abhishiek

在Unix中删除模式后的所有内容

  •  -1
  • av abhishiek  · 技术社区  · 8 年前

    我有根绳子 replenishment_category string,Date string ,我想删除从开始的所有内容 Date (包括它),如果它存在的话,还包括它前面的逗号。

    我将要替换的字符串存储在变量中:

    PARTITION_COLUMN='Date'
    

    我试过了 sed 替换变量后的所有内容 PARTITION_COLUMN

    echo "replenishment_category string,Date string" | sed "s/"$PARTITION_COLUMN".* //g"
    

    但是输出仍然有日期之后的字符串:

    replenishment_category string,string
    

    我如何移除 string 部分和逗号位于 日期 ?

    4 回复  |  直到 8 年前
        1
  •  1
  •   oliv    8 年前

    试试这个:

    echo "replenishment_category string,Date string" | sed "s/$PARTITION_COLUMN.*//"
    

    注意后面的空格 .* 以及整个命令的双引号。

        2
  •  0
  •   Benjamin W.    8 年前

    您可以单独使用shell参数扩展来实现这一点,前提是您启用了扩展的globs。( shopt -s extglob ):

    $ var='replenishment_category string,Date string'
    $ part_column=Date
    $ echo "${var%%?(,)"$part_column"*}"
    replenishment_category string
    
    • 这个 ${word%% pattern } 扩展在不使用扩展的全局变量的情况下工作,并删除 pattern 从…结束 $word .
    • 这个 ?( pattern ) 扩展模式匹配零个或一个 图案 用于删除逗号(如果存在)。
    • "$part_column"* 匹配以扩展 $part_column . 在示例中不需要引用它,但要防止glob字符的扩展,必须使用良好的实践。
        3
  •  0
  •   RavinderSingh13 Nikita Bakshi    8 年前

    因为您要删除变量以及变量前面的逗号,所以 sed 可以在这里帮你。

    echo "replenishment_category string,Date string" | sed "s/,$PARTITION_COLUMN.*//g"
    
        4
  •  0
  •   ashish_k    8 年前

    sed 显然在这里工作:

    echo "replenishment_category string,Date string" | sed "s/\b,$PARTITION_COLUMN.*//"

    输出:

    replenishment_category string

    推荐文章