sed删除特定行的问题

daviddb7 2011-11-16 07:23:56
写了个sh脚本,目的是在类似conf文件中查找到某个特定项,将其删除。
考虑到有时候会在conf中加#注释,在注释掉的时候也要删除。
$W和$2是需要查找的部分。

sed的部分是这样写的
sed -e "/^$W\s$2.*/d" $CONF_FILE.bak > $CONF_FILE
删除失败鸟……文件还是原来的样子。返回值为0。
但是类似的一行
sed -e "/^\#$W\s$2.*/d" $CONF_FILE.bak > $CONF_FILE
执行成功。也就是说以#开头的可以正常删除。

第一条哪里写的有问题?
...全文
499 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
daviddb7 2011-11-17
  • 打赏
  • 举报
回复
最后解决办法是在sed 里连用多个-e参数,写成一行就好了……
daviddb7 2011-11-17
  • 打赏
  • 举报
回复
多谢。睡了一晚上,早上起来想清楚了。
因为用了个bak,连写两行实际只有第二行执行了。
如果把顺序换一下,就是带#的不执行了。
验证后结贴。
向良玉 2011-11-16
  • 打赏
  • 举报
回复
我实验的:
cat a.txt
1 2
#1 2

vim a.sh
#!/bin/bash
W=1
sed -e "/^$W\s$2.*/d" a.txt
sed -e "/^#$W\s$2.*/d" a.txt

sh -x a.sh 1 2
+ W=1
+ sed -e '/^1\s2.*/d' a.txt
#1 2
+ sed -e '/^#1\s2.*/d' a.txt
1 2
daviddb7 2011-11-16
  • 打赏
  • 举报
回复
这两行执行的是
sed -e /^aaa\sbbb.*/d filename
sed -e /^\#aaa\sbbb.*/d filename
向良玉 2011-11-16
  • 打赏
  • 举报
回复
sh -x **.sh
你看看sed的那句话到底执行的什么
daviddb7 2011-11-16
  • 打赏
  • 举报
回复
有部分内容不太好公开,再补充一下,
sed -e "/^$W\s$2.*/d" $CONF_FILE.bak > $CONF_FILE
sed -e "/^\#$W\s$2.*/d" $CONF_FILE.bak > $CONF_FILE
这两条是在一起的,也就是说满足条件时会一起执行。

如果文档中有
aaa bbb somestring
这样的条目,没有删掉。
但是有
#aaa bbb somestring
这样的行就删掉了。
向良玉 2011-11-16
  • 打赏
  • 举报
回复
...内容贴出来,我们一起看
daviddb7 2011-11-16
  • 打赏
  • 举报
回复
貌似改成\\s也还是不行啊,郁闷了
daviddb7 2011-11-16
  • 打赏
  • 举报
回复
$W、$2不是变量吗?
---------------
是变量,W有赋值,2是从命令行获取,在这执行的时候都有值。
如果变量必须在引号外的话,那么我的第二条也应该失败啊。
向良玉 2011-11-16
  • 打赏
  • 举报
回复
sed -e "/^$W\\s$2.*/d" $CONF_FILE.bak > $CONF_FILE
这样呢
向良玉 2011-11-16
  • 打赏
  • 举报
回复
$W、$2不是变量吗?
daviddb7 2011-11-16
  • 打赏
  • 举报
回复
sed -e "/^"$W"\s"$2".*/d" $CONF_FILE.bak > $CONF_FILE
这样..
--------------------
不行啊,还是失败。貌似只是把变量写到引号外面去了。
奇怪的是我的第二行能执行成功,就差了一个\#么。
向良玉 2011-11-16
  • 打赏
  • 举报
回复
sed -e "/^"$W"\s"$2".*/d" $CONF_FILE.bak > $CONF_FILE
这样..

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧