免费注册 查看新帖 |

Chinaunix

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

一个shell删除变量指定行的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-21 19:56 |只看该作者 |倒序浏览
今天遇到了一个问题,就是删除匹配到一个变量的行。但是这个变量中还含有"/"这个特殊符号。

例如:
$a="192.168.0.1/24"
$cat test.txt
192.168.0.1
192.168.0.1/24
现在是要删除包含192.168.0.1/24的行.

sed “/$a/d” test.txt
不行,因为变量中包含"/",会产生歧义。
以前我写过文章,可以使用@来转移特殊字符

找了很长时间,没有找到解决方法,只好使用一种BT的方法了。
$sed "s@$a@@" test.txt | sed '/^$/d'
使用了两条命令来删除的,首先将原来的替换为空,再删除空行

不知道哪一位网友知道更好的方法?

论坛徽章:
0
2 [报告]
发表于 2007-03-21 20:37 |只看该作者
sed "/192\.168\.0\.1\/24/d" youfile 是可以的。

所以令$a='192\.168\.0\.1\/24'
sed "/$a/d" yourfile 就可以的。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-03-21 22:51 |只看该作者
sed "s#$a##"

论坛徽章:
0
4 [报告]
发表于 2007-03-22 08:35 |只看该作者
一定要用sed嘛?
我觉得还是用合适的工具完成合适的事情比较好
grep -v $a test.txt

论坛徽章:
0
5 [报告]
发表于 2007-03-22 10:09 |只看该作者
原帖由 寂寞烈火 于 2007-3-21 22:51 发表
sed "s#$a##"


这一个只是进行替换,没有删除。还是需要两步来完成删除操作。

论坛徽章:
0
6 [报告]
发表于 2007-03-22 10:10 |只看该作者
原帖由 lovelyarry 于 2007-3-22 08:35 发表
一定要用sed嘛?
我觉得还是用合适的工具完成合适的事情比较好
grep -v $a test.txt


虽然避开了上面sed的问题,仍不失为一个很不错的解决方法。
但是我的目的是删除指定的行,这样的话,需要定向的一个临时文件,再重命名。也需要两步来完成,不是很爽~~

[ 本帖最后由 CUDev 于 2007-3-22 10:12 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-03-22 10:50 |只看该作者
还是sed "s#$a##"的好,简便

[ 本帖最后由 jarhead1 于 2007-3-22 10:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-03-22 14:33 |只看该作者
原帖由 CUDev 于 2007-3-22 10:10 发表


虽然避开了上面sed的问题,仍不失为一个很不错的解决方法。
但是我的目的是删除指定的行,这样的话,需要定向的一个临时文件,再重命名。也需要两步来完成,不是很爽~~


其实也好办,
a="192.168.0.1\/24"
sed "/$a/d" test.txt
就可以搞定

论坛徽章:
0
9 [报告]
发表于 2007-03-22 15:28 |只看该作者

回复 8楼 lovelyarry 的帖子

在之前不知到变量中有"/",这样的话,首先需要判断一下有没有/,再用。也不是很爽~

论坛徽章:
0
10 [报告]
发表于 2007-03-22 15:59 |只看该作者
直接用变量也可以啊,外面加个套呗,嘿嘿
a=$(echo $ased 's/\//\\\//g')
sed "/$a/d" test.txt

[ 本帖最后由 lovelyarry 于 2007-3-22 16:07 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP