linux sed 常用用法举例01

判断是否以. 开头

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

 

 

就地写入文件:


sed_i() 
{
        scripts="$1"
        targetFile=$2
        sed -e "$scripts" "$targetFile" >"$targetFile.bak"
        rm -f "$targetFile"
        mv "$targetFile.bak" "$targetFile"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值