免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] FreeBSD下的sed 去掉包含某单词的行的最前面注释符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-20 18:40 |只看该作者 |倒序浏览
操作系统:FreeBSD10.0
shell:tcsh
当然其他操作系统下的写法也可以参考。

如题。
比如我要写个脚本,自动修改apache22的配置文件,去掉这一行前面的#号:
...
#Include /usr/local/etc/apache22/extra/httpd-ssl.conf
...

我想到的是笨方法:
# sed -i "" 's/#Include\ \/usr\/local\/etc\/apache22\/extra\/httpd-ssl.conf/Include\ \/usr\/local\/etc\/apache22\/extra\/httpd-ssl.conf/' httpd.conf

有没有更好的办法?

以上
Ivan

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
2 [报告]
发表于 2014-02-20 21:52 |只看该作者
回复 1# ivanhan0511

  1. sed  "s/^#//"  httpd.conf
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-02-21 10:26 |只看该作者
本帖最后由 ivanhan0511 于 2014-02-21 10:26 编辑

但这个命令行的意思是,删除以#号开头的行,对吧。
可我有很多这样的行,而且我要指定包含了某个单词的行,怎么过滤呢?

这样的问题有解吗?

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
4 [报告]
发表于 2014-02-21 10:35 |只看该作者
回复 3# ivanhan0511


这个命令的意思是,把每一行开始的#去掉,其余的保持不变。

你试着运行一下再说吧。

论坛徽章:
0
5 [报告]
发表于 2014-02-21 10:52 |只看该作者
回复 2# wait_rabbit
  1. [ root@IWork ]:~ # cat httpd.conf
  2. #Include httpd-ssl.conf
  3. #Include httpd-abc.conf
  4. #Include httpd-def.conf
  5. [ root@IWork ]:~ # sed 's/^#//' httpd.conf
  6. Include httpd-ssl.conf
  7. Include httpd-abc.conf
  8. Include httpd-def.conf
复制代码
我想得到的结果是,只过滤包含“httpd-ssl.conf"单词的这一行,并把前面的注释符去掉。

论坛徽章:
0
6 [报告]
发表于 2014-02-21 10:54 |只看该作者
回复 2# wait_rabbit


[ root@IWork ]:~ # cat httpd.conf
#Include httpd-ssl.conf
#Include httpd-abc.conf
#Include httpd-def.conf
[ root@IWork ]:~ # sed 's/^#//' httpd.conf
Include httpd-ssl.conf
Include httpd-abc.conf
Include httpd-def.conf

我想要得到的结果是:只过滤包含“http-ssl.conf"单词的这一行,并去掉前面的注释符。

得用到lable功能吗,但不太会用。

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
7 [报告]
发表于 2014-02-21 11:28 |只看该作者
回复 6# ivanhan0511

:wink:
  1. $ cat httpd.conf
  2. #Include httpd-ssl.conf
  3. #Include httpd-abc.conf
  4. #Include httpd-def.conf

  5. $ sed  's/^#\(.*\)\(httpd-ssl\)\(.*\)/\1\2\3/' httpd.conf
  6. Include httpd-ssl.conf
  7. #Include httpd-abc.conf
  8. #Include httpd-def.conf
复制代码

论坛徽章:
0
8 [报告]
发表于 2014-02-21 14:27 |只看该作者
回复 7# wait_rabbit


    看明白了,非常感谢你的全程大力支持!!!

以上
Ivan

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
9 [报告]
发表于 2014-02-21 16:52 |只看该作者
sed已经够简单的了,用preg处理还要好几行呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP