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>

grep が通常返すものの逆を検索-vます。このような単純なケースでは、このアプローチは sed や awk よりも簡単だと思います。

于 2012-04-27T19:42:02.027 に答える