免费注册 查看新帖 |

Chinaunix

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

[原创]:说说sed中引号的用法(抛砖引玉!)  关闭 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-02 08:43 |只看该作者 |倒序浏览
引号(" ')在shell编程中起着相当重要的脚色,应用得当,则程序易写易读,简洁明快,否则,会让人头痛不已!兵书说“运用之妙,存乎于心!”,下面就自己最近学习中的一点心得,与朋友们交流,希望得到大家的斧正!
其实在sed中使用shell变量相对来说还是比较简单的,关键是引号的用法:
比如:
借用yoursmile朋友的数据
  1. cat file
  2. 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
  3. 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
  4. 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
  5. 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
  6. 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
  7. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  8. 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
  9. 5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/
  10. 9 192.68.82.78   [05/Jun/2003:00:05:45 /ss
  11. 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码
d=6
取文件的第六行,则
单引号
  1. sed -n ''"$d"'/p'  file
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

双引号
  1. sed -n "$d"p file  or  sed -n "${d}p" file
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

结果完全相同。
又:
取文件的第1到第6行,则:
单引号:
  1. sed -n '1,'"$d"'p' file
  2. 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
  3. 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
  4. 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
  5. 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
  6. 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
  7. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

双引号:
  1. sed -n "1,$d"p file  or  sed -n "1,${d}p"  file
  2. 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
  3. 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
  4. 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
  5. 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
  6. 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
  7. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

取第6行到文件尾
单引号:
  1. sed -n ''"$d"',$p' file
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  3. 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
  4. 5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/
  5. 9 192.68.82.78   [05/Jun/2003:00:05:45 /ss
  6. 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码

双引号:
  1. sed -n "$d,\$p"  file  or  sed -n "$d,$"p
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  3. 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
  4. 5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/
  5. 9 192.68.82.78   [05/Jun/2003:00:05:45 /ss
  6. 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码

如果上面的6保存在一个line的文件中(该文件中只此一行时!),则
单引号:
  1. sed -e ''"`cat line`"'p' file
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

双引号:
  1. sed -n "`cat line`"p file
  2. 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码

从上面的例子可以看出,引号的应用,是乎是有讲究的,只要灵活应用,就可使代码简洁明快,看起来舒服,用起来舒心,写起来方便!
简而言之:凡是要引用shell变量时,最好使用双引号“"”做sed的定界符,这样会更方便些,但要使用双引号一定要注意避免shell解释sed命令,比如“$p”原意为打印文件末行,但shell会解释为取变量p的值,因此在使用中要加以注意,可用“\$p”或“"$"p”等方式来解决此类问题。

论坛徽章:
0
2 [报告]
发表于 2003-08-02 20:58 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

谢谢!好东东!建议大师用颜色区分一下各引号,便于初学者。

加精吧!!!

论坛徽章:
0
3 [报告]
发表于 2003-08-10 20:59 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

Very Good!


总结的好啊。

论坛徽章:
0
4 [报告]
发表于 2003-08-10 23:33 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

虽说" '这类的符号在shell中很不起眼,但是能真正把这些符号运用得自如的却很少!
--我们要用符号控制我们的电脑!

论坛徽章:
0
5 [报告]
发表于 2003-08-11 08:29 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

原帖由 "bjgirl" 发表:

我们要用符号控制我们的电脑!
   

有点预言家的味道!~

论坛徽章:
0
6 [报告]
发表于 2003-08-11 09:40 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

收了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-08-11 10:26 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

获益非浅 ...

论坛徽章:
0
8 [报告]
发表于 2003-08-11 10:29 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

简直就是符号杀手!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-08-11 12:21 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

[quote]原帖由 "xingj_h"]简直就是符号杀手![/quote 发表:
   
太夸张了吧?!     
希望能尽早看见你的符号精灵!
加油!!

论坛徽章:
0
10 [报告]
发表于 2003-08-11 13:41 |只看该作者

[原创]:说说sed中引号的用法(抛砖引玉!)

对引号处理不清楚的,建议读:
Unix® Shell Programming, Third Edition
Chapter 6. Can I Quote You on That?

概括如下:
1、单引号:所有内容都留给应用解释
2、双引号:除Dollar signs,Back quotes,Backslashes外,所有内容留给应用解释。
3、Backslash相当于将跟随字符用单引号处理。

帮楼主明确一下,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP