【问题标题】:Filter input to remove certain characters/strings过滤输入以删除某些字符/字符串
【发布时间】:2012-06-26 11:07:11
【问题描述】:

我有一个关于文本解析的快速问题,例如:

INPUT="a b c d e f g"
PATTERN="a e g"

应该修改INPUT变量,以便删除PATTERN字符,所以在这个例子中:

OUTPUT="b c d f"

我尝试过使用

tr -d $x
在 for 循环中按“PATTERN”计数,但我不知道如何为下一次循环迭代传递输出。

编辑: 如果 INPUT 和 PATTERN 变量包含字符串而不是单个字符怎么办???

【问题讨论】:

    标签: bash sed awk sh


    【解决方案1】:

    $x 来自哪里?无论如何,你很接近:

    tr -d "$PATTERN" <<< $INPUT
    

    要将结果分配给变量,只需使用

    OUTPUT=$(tr -d "$PATTERN" <<< $INPUT)
    

    请注意,空格也会被删除,因为它们是 $PATTERN 的一部分。

    【讨论】:

    • 这个 $x 最初是我在 for 循环中的计数器:
      for x in $PATTERN;回显 $INPUT | tr -d $x ... done
      您的解决方案非常好,但忘了提到我一开始不知道 $PATTERN 会有多少个字符,但您的对 3 个字符有好处..
    【解决方案2】:

    使用参数替换的纯 Bash:

    INPUT="a b c d e f g"
    PATTERN="a e g"
    
    for p in $PATTERN; do
      INPUT=${INPUT/ $p/}
      INPUT=${INPUT/$p /}
    done
    echo  "'$INPUT'"
    

    结果:

    'b c d f'
    

    【讨论】:

    • 也适用于字符串,gr8 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多