免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2963 | 回复: 9
打印 上一主题 下一主题

在脚本中sed的变量调用的不对,但又不知道怎么改~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-19 17:40 |只看该作者 |倒序浏览
#!/bin/bash

if [ -f "10.txt" ]; then
   echo "check pn ok"
fi

if [ -f "11.txt" ] ;then
   echo "check  pn1 ok"
fi


while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/$line/d' 11.txt >12.txt
done <"10.txt"

脚本的原意是用在去掉11.txt中包含10.txt 内容的行 ,
sed '/$line/d' 11.txt >12.txt
这个指令,运行的结果看,好像是变量$line 没有传过来! 我刚学shell 脚本,希望大家多指教一下!

论坛徽章:
0
2 [报告]
发表于 2005-05-19 17:53 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

sed '/$line/d' 11.txt >12.txt 改为sed '/"'$line'"/d' 11.txt >12.txt

论坛徽章:
0
3 [报告]
发表于 2005-05-19 18:03 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

[quote]原帖由 "lych"]sed '/$line/d' 11.txt >12.txt 改为sed '/"'$line'"/d' 11.txt >12.txt[/quote 发表:


我改了一下!生成的12.txt 文件 内容没有变,和11.txt 一样 这是为什么啊!

论坛徽章:
0
4 [报告]
发表于 2005-05-19 18:18 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

知道问题在哪里了,这个while 循环 的问题 !由于循环每次都从11.txt 当中剔除一行,保存到12.txt中 ,所以得不到需要得结果。那有没有别得办法呢,比如每次把11.txt中的文件删除了以后,又保存成11.txt  下回循环的时候 就能得到结果了!但sed 文档说它不接触初始化文件 。。。。。。我郁闷了!

论坛徽章:
0
5 [报告]
发表于 2005-05-19 22:57 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

原帖由 "西门子"]txt"  发表:
;then
   echo "check  pn1 ok"
fi


while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/$line/d' 11.txt >12.txt
done <"10.txt"

脚本的原意是用在去掉11.txt中?.........



用sed "/$line/d" 11.txt >12.txt吧

论坛徽章:
0
6 [报告]
发表于 2005-05-20 09:14 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

楼上得兄弟,不是那样了!首先sed处理变量是 ‘“$line”’ 来处理的,
还有你看到我的while 循环了吗?它每做一次循环 都要重新把12.txt 写一遍,也就是说 while循环的最后一个变量用sed 处理结果会写到12。txt 中。 这不是我要的结果! 我是想 把文件1,文件2 都有的行在文件2中删除!

论坛徽章:
0
7 [报告]
发表于 2005-05-20 09:33 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

原帖由 "西门子"]txt"  发表:
;then
   echo "check  pn1 ok"
fi


while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/$line/d' 11.txt >12.txt
done <"10.txt"

脚本的原意是用在去掉11.txt中?.........


将你的程序改为:
while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/$line/d' 11.txt >11.txt
done <"10.txt"
这样你得到11.txt中的内容就没有10.txt内容了.

论坛徽章:
0
8 [报告]
发表于 2005-05-20 12:16 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

原帖由 "biliwei" 发表:


将你的程序改为:
while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/$line/d' 11.txt >11.txt
done <"10.txt"
这样你得到11.txt中的内容就没有10.txt内容了.


sed '/$line/d' 11.txt >11.txt 这样是不行的,运行得结果是11.txt 里边的内容是空!

论坛徽章:
0
9 [报告]
发表于 2005-05-20 12:38 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

那个while循环体的功能用这个估计可以实现:

  1. grep -v -f 10.txt 11.txt > 11.txt.tmp
  2. mv 11.txt.tmp 11.txt
复制代码


要不你添加一条mv语句也可以。

  1. .....
  2. sed "/$line/d" 11.txt >12.txt
  3. #added.
  4. mv 12.txt 11.txt
  5. .....
复制代码

论坛徽章:
0
10 [报告]
发表于 2005-05-20 15:06 |只看该作者

在脚本中sed的变量调用的不对,但又不知道怎么改~

通过各位兄弟的帮忙和我自己不断的调试,总于调试通过了!
下面把ok的程序放上来,
#!/bin/bash

if [ -f "10.txt" ]; then
   echo "check ben qi zhong jiang  pn ok"
fi

if [ -f "11.txt" ] ;then
   echo "check  yi jing zhongjiang pn ok"
fi


while read line ; do
##read pn from "10.txt"
     echo $line
     sed '/'"$line"'/d' 11.txt >11.txt.tmp
    mv 11.txt.tmp  11.txt



done <"10.txt"


这里最容易出错的地方是sed 的变量处理问题,它需要 用‘ “$line” ’ 来处理,如果使用sed '/$line/d' 11.txt 是得不到处理得结果的,大家可以自己做试验!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP