六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

linux sed 常用用法举例01

[复制链接]

升级  94.67%

58

主题

58

主题

58

主题

秀才

Rank: 2

积分
192
 楼主| 发表于 2013-2-4 12:56:20 | 显示全部楼层 |阅读模式
 

判断是否以. 开头

echo .abc |grep "^\." ;echo $?
 
 
 

判断是否以/ 开头

echo /abc |grep "^/" ;echo $?
 
 

 <!--[endif]-->判断是否以\ 开头

echo "\abc"  |grep "^\\\\" ;echo $?
 
 

 <!--[endif]-->sed 多次修改

两种方式:可以使用-e ,也可以使用分号。
范例01:
sed 's/abc/000/g;s/000/uuu/g' abc.txt
 
范例02:
[whuang@localhost test]$ echo The  tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/;  s/after/before/'
The wolf cubs will meet  on Tuesday before school
 
 
 

  <!--[endif]-->sed 当$ 与#相遇

以下是错误的:
find$kingbase_own_home/.local/share/applications -type f -name"*.desktop" |xargs -i sed -i "s#^\(Icon=\)\([^ ]\+\)$#\1${install_dir}\2.png#g"{}
正确的应该是:
find$kingbase_own_home/.local/share/applications -type f -name"*.desktop" |xargs -i sed -i "s#^\(Icon=\)\([^ ]\+\)\$#\1${install_dir}\2.png#g"{}
点评:linux 会把$# 解析成为0.
 
范例01:
脚本名称:sed_#.sh
脚本内容:
#!/bin/sh
echo Icon=KDB_ISQL|sed  "s#^\(Icon=\)\(KDB_ISQL\)$#\1CCC\2.png#g"
脚本运行结果:
[root@localhost sed_study]# sh sed_#.sh
sed:-e 表达式 #1,字符 38:unterminated `s' command
原因:sh把$#解析成为0 了。
以debug 方式运行:
[root@localhost sed_study]# sh sed_#.sh
+ echo Icon=KDB_ISQL
+ sed 's#^\(Icon=\)\(KDB_ISQL\)0\1CCC\2.png#g'
sed:-e 表达式 #1,字符 38:unterminated `s' command
解决方法:
对$进行转义:
#!/bin/sh
echo Icon=KDB_ISQL|sed  "s#^\(Icon=\)\(KDB_ISQL\)\$#\1CCC\2.png#g"
 
 
 

  <!--[endif]-->去掉两边的引号

方式一:
 
myn=$(echo $myname |sed -e"s/\"\(.*\)\"/\1/g")

myn=$(echo $myname |sed -e"s/\"\([^ ]*\)\"/\1/g")
方式二:
myname2= ${myname#\"}
echo ${myname2%\"}
 
 
 

  <!--[endif]-->双重条件

多重条件     多个条件
范例01
sed '64,${/PATH/d}' av.txt
 
范例02:
[root@localhost ~]# echo -e  "abc1\nccc1\nbbb1\nddd1"|sed '/bbb/ s/1/2/'
abc1
ccc1
bbb2
ddd1
[root@localhost ~]# echo -e  "abc1\nccc1\nbbb1\nddd1"
abc1
ccc1
bbb1
ddd1
 
范例03:
abc.txt 的内容:
abcxxx
abcddd
abc222
abc444
abc555
abc666
abc777
需求:仅仅把2-3行的abc 替换成为000
[root@localhost test]# sed  '2,3{s/abc/ooo/;}'  abc.txt
abcxxx
oooddd
ooo222
abc444
abc555
abc666
abc777
 
范例04:
删除指定范围内的行
abc.txt 的内容如下:
111
abc222
333
444
abc444
需求只删除1-3行中匹配abc的所有行
sed '1,3{/abc/d;}' abc.txt
 
 
范例05:
abc.txt 文件的内容:
test aa
est bbc  aa
cccc aa
sed '/test/{ n;n; s/aa/bb/; }' abc.txt
执行结果:
test aa
est bbc  aa
cccc bb
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表