- 论坛徽章:
- 1
|
引号(" ')在shell编程中起着相当重要的脚色,应用得当,则程序易写易读,简洁明快,否则,会让人头痛不已!兵书说“运用之妙,存乎于心!”,下面就自己最近学习中的一点心得,与朋友们交流,希望得到大家的斧正!
其实在sed中使用shell变量相对来说还是比较简单的,关键是引号的用法:
比如:
借用yoursmile朋友的数据
- cat file
- 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
- 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
- 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
- 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
- 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
- 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
- 5 192.68.82.78 [05/Jun/2003:00:05:45 /hou/
- 9 192.68.82.78 [05/Jun/2003:00:05:45 /ss
- 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码 d=6
取文件的第六行,则
单引号
- sed -n ''"$d"'/p' file
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
双引号
- sed -n "$d"p file or sed -n "${d}p" file
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
结果完全相同。
又:
取文件的第1到第6行,则:
单引号:
- sed -n '1,'"$d"'p' file
- 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
- 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
- 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
- 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
- 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
双引号:
- sed -n "1,$d"p file or sed -n "1,${d}p" file
- 1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
- 2 192.148.99.253 [17/Jun/2003:11:18:21 /si
- 1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
- 2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
- 1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
取第6行到文件尾
单引号:
- sed -n ''"$d"',$p' file
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
- 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
- 5 192.68.82.78 [05/Jun/2003:00:05:45 /hou/
- 9 192.68.82.78 [05/Jun/2003:00:05:45 /ss
- 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码
双引号:
- sed -n "$d,\$p" file or sed -n "$d,$"p
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
- 3 192.93.108.187 [17/Jun/2003:14:39:11 /si
- 5 192.68.82.78 [05/Jun/2003:00:05:45 /hou/
- 9 192.68.82.78 [05/Jun/2003:00:05:45 /ss
- 4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
复制代码
如果上面的6保存在一个line的文件中(该文件中只此一行时!),则
单引号:
- sed -e ''"`cat line`"'p' file
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
双引号:
- sed -n "`cat line`"p file
- 1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
复制代码
从上面的例子可以看出,引号的应用,是乎是有讲究的,只要灵活应用,就可使代码简洁明快,看起来舒服,用起来舒心,写起来方便!
简而言之:凡是要引用shell变量时,最好使用双引号“"”做sed的定界符,这样会更方便些,但要使用双引号一定要注意避免shell解释sed命令,比如“$p”原意为打印文件末行,但shell会解释为取变量p的值,因此在使用中要加以注意,可用“\$p”或“"$"p”等方式来解决此类问题。 |
|