求shell脚本,删除一个txt文档中包含另外一个txt文档的行。

 我来答
iahner
2011-11-17 · TA获得超过156个赞
知道答主
回答量:99
采纳率:0%
帮助的人:54.2万
展开全部
#!/usr/bin/ksh
###[局部方法]########################
SedFileCont()
{
_fileName=$1
_fromContent=$2
_toContent=$3

vi $_fileName <<! >/dev/null
:1,%s/$_fromContent/$_toContent/g
:x
!

}
###[局部方法]########################

#需要删除行的txt:src.txt
#执行匹配行的txt:std.txt
###[执行修改]########################

cat std.txt|while read strLine
do
cnt=0
cat src.txt|grep ${strLine}|wc -l|read cnt
[ $cnt -eq 0 ] && continue
[ $cnt -gt 0 ] && SedFileCont src.txt ${strLine} "\c"
done

###[执行修改]########################
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luneng8183
2011-11-17 · TA获得超过902个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:513万
展开全部
#!/bin/bash
#
# assume /tmp/a.txt is the file for keywords
# /tmp/b.txt is the file to be operated

awk '
BEGIN{
i=0

while(getline < "/tmp/a.txt" > 0) {
keyword[i++] = $0
}

keysize=i
}

{
flag=0
for(i=0;i<keysize;i++)
if($0 ~ keyword[i])
flag=1

if(flag==0)
print
}' /tmp/b.txt > /tmp/b.txt.tmp

# replace /tmp/b.txt with modified /tmp/b.txt.tmp
mv /tmp/b.txt.tmp /tmp/b.txt

把上述代码保存为脚本。调试:
debian:~/prog/shell# cat /tmp/a.txt
abc def
def
kllmn
delete
debian:~/prog/shell# cat /tmp/b.txt
#!/bin/bash

delete
kllmn

执行脚本后:
debian:~/prog/shell# cat /tmp/b.txt
#!/bin/bash
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式