0

我有一个像这样的文件:

<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的行。如何制作脚本以自动删除这些?

4

3 回答 3

2

也许

grep -vf <(printf "%s\n" reset newitem details) filename
于 2012-04-27T20:04:40.193 回答
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'
于 2012-04-27T20:14:55.230 回答
1

如果要删除字符串中出现“reset”、“newitem”或“details”行,可以轻松地将一些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 更容易。

于 2012-04-27T19:42:02.027 回答