如何从文件中删除包含任何一个字符串数组的行?

时间:2012-04-27 19:36:27

标签: regex sed awk

我有一个类似的文件:

<string name="app_name">多系统启动免费版</string>
<string name="newitem">新建</string>
<string name="edit">编辑</string>
<string name="edits">编辑\u0020</string>
<string name="details">详情</string>
<string name="resize">改变大小</string>
<string name="seticon">设置图标</string>
<string name="delete">"删除 \u0020"</string>
<string name="reset">恢复出厂设置</string>
<string name="setdefault">设为默认</string>
<string name="description">多系统启动免费版</string>
<string name="nodata">没有发现虚拟系统镜像!!!</string>

我希望从中删除包含reset newitem details的行。如何使脚本自动删除?

3 个答案:

答案 0 :(得分:2)

也许

grep -vf <(printf "%s\n" reset newitem details) filename

答案 1 :(得分:2)

最简单的是grep -v -e reset -e newitem -e details,正如已经说过的那样。但对于踢球,这里是sed:

sed '/reset/d;/newitem/d;/details/d'
sed '/reset\|newitem\|details/d'

和awk:

awk '!/reset|newitem|details/'
awk '!/reset/ && !/newitem/ && !/details/'
awk '/reset/ || /newitem/ || /details/ { next } 1'

答案 2 :(得分:1)

如果您要删除字符串中“重置”,“新项目”或“详细信息”出现 的行,您可以轻松地将一些grep -v语句链接在一起:

prompt:~/> cat file.txt | grep -v reset | grep -v newitem | grep -v details
<string name="app_name">多系统启动免费版</string>
<string name="edit">编辑</string>
<string name="edits">编辑\u0020</string>
<string name="resize">改变大小</string>
<string name="seticon">设置图标</string>
<string name="delete">"删除 \u0020"</string>
<string name="setdefault">设为默认</string>
<string name="description">多系统启动免费版</string>
<string name="nodata">没有发现虚拟系统镜像!!!</string>

-v搜索grep通常返回的。对于像这样的简单情况,我认为这种方法比sed或awk更容易。