关于linux sed命令的问题,删除多行,一行包含两个关键词,删除含两个关键词的行

<packagename="aaa"codePath="/bbb"flags="1"ts="77000"version="8"sharedUserId="10014"><... <package name="aaa" codePath="/bbb" flags="1" ts="77000" version="8" sharedUserId="10014">
<sigs count="1">
<cert index="4">
</sigs>
</package>
请问我要删除第一行含package和10014,一直到最后含有/package的所有行,sed命令怎么使用啊,万分感谢啊
展开
 我来答
小米飞猫
2011-12-07 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部
用sed一句话,我想不出来怎么写。写了个脚本,应该可以实现你要的功能。
如果你确定<package 10014 到/package> 这个保证是5行的话。

#!/bin/bash
filename=file
LINES=`grep -n 'sharedUserId="10014"' $filename | wc -l`
while [[ $LINES -ne 0 ]]
do
STARTnum=(`grep -n 'sharedUserId="10014"' $filename | awk -F":" '{print $1}'`)
for i in ${STARTnum[0]}
do
j=`expr $i + 4`
sed -i ''$i','$j'd' file
done
((LINES--))
done
#######################
你试试 sed -i '/^<package.*10014/,/^<\/package/d'
lanjiansirgmai
2011-12-07
知道答主
回答量:2
采纳率:0%
帮助的人:3404
展开全部
如果<package .*10014.*>与</package>中不含子<package></package>就可以用
sed -i '/^<package.*10014/,/^<\/package>$/d' fileName
如果含就必须先找出你删除结束行第m行,然后
sed -i '/^<package.*10014/,$md' fileName
m获取方法比较多,看你文件的格式怎样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ggpsflh4178
2011-12-05
知道答主
回答量:11
采纳率:0%
帮助的人:1.8万
展开全部
nms掏白蒂YPX呵呵393油蠢萄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式