带有简单正则表达式的bash脚本

时间:2013-11-13 02:32:05

标签: regex bash sed

考虑以下带有简单正则表达式的bash脚本:

for f in "$FILES"
do
  echo $f
  sed -i '/HTTP|RT/d' $f
done

此脚本应读取FILES指定的目录中的每个文件,并删除出现'http''RT'的行。但是,似乎正则表达式的OR部分是不工作也就是说,如果我只有sed -i '/HTTP/d' $f,那么它会移除包含HTTP的所有行,但我无法将其删除HTTPRT

  1. 我必须在正则表达式中更改哪些内容才能删除包含HTTPRT的行?
  2. 提前致谢!

3 个答案:

答案 0 :(得分:2)

两种方式(至少):

  1. 了解你的正则表达式:

    sed -E -i '/HTTP|RT/d' $f

  2. 分别指定每个令牌:

    sed -i '/HTTP/d;/RT/d' $f

答案 1 :(得分:1)

在你做任何事情之前,用相反的方式运行,打印你打算删除的东西:

sed -n -e '/HTTP/p' -e '/RT/p' $f

确保在实际更改文件之前仅删除要删除的内容。

“这不是你是否是偏执狂的问题,而是你是否偏执狂。”

答案 2 :(得分:0)

首先,它将处理FILES变量中的所有WORDS。

如果你想要它来完成FILES目录中的所有文件,那么你需要这样的东西:

for f in $( find $FILES -maxdepth 1 -type f )
do
   echo $f
    sed -i -e '/HTTP/d' -e '/RT/d' $f
done

你只需要两个“-e”选项即可。