考虑以下带有简单正则表达式的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
的所有行,但我无法将其删除HTTP
和RT
HTTP
或RT
的行?提前致谢!
答案 0 :(得分:2)
两种方式(至少):
了解你的正则表达式:
sed -E -i '/HTTP|RT/d' $f
分别指定每个令牌:
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”选项即可。