过滤输入以删除某些字符/字符串

时间:2012-06-25 07:34:44

标签: bash sed awk sh

我对文本解析有快速提问,例如:

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

应修改INPUT变量,以便删除PATTERN字符,因此在此示例中:

OUTPUT="b c d f"

我试图在'PATTERN'的for循环计数中使用

tr -d $x
,但我不知道如何为下一次循环迭代传递输出。

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

2 个答案:

答案 0 :(得分:3)

$x来自哪里?无论如何,你很亲密:

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

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

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

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

答案 1 :(得分: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'