shell sed

s表示替换,\%就表示百分号,s/\%//将%替换为空,最后的g标志表示全部替换

1>.sed删除行首的空格或tab字符。

sed 's/^[ \t]*//g' file

sed 's/^ *//g' file

2>.sed输出字符串:

打印第三行(3表示等号,p表示打印)

sed -n '3p' /etc/passwd

打印2至5行

sed -n '2,5p' /etc/passwd

从第2行开始,每隔3行打印一行

sed -n '2~3p' /etc/passwd

打印最后一行

sed -n '$p' /etc/passwd

打印包含或不包含root的行

sed -n '/root/p' /etc/passwd

sed -n '/root/! p' /etc/passwd

打印包含/bin/bash的行(%regexp%可以不用转义斜杠)

sed -n '\%/bin/bash%p' /etc/passwd

忽略大小写的搜索

sed -n '\%/BIN/bash%Ip' /etc/passwd或sed -n '/\/BIN\/bash/Ip' /etc/passwd

搜索从开始到sshd字符的范围

sed -n '0,/sshd/p' /etc/passwd

3>sed正则表达式的介绍:

char

只匹配本身char

*

匹配之前字符的0个或更多

+

与*相比,只是匹配1个或更多

?

匹配前面字符的0个或1个

{i}

匹配前面字符的i个,i是整数

{i,j}

匹配前面字符的i至j个,包含i和j

{i,}

匹配前面字符的i个或i个以上

(regexp)

分组字符,两个作用1、(abcd)*会搜索0个或多个abcd字符,abcd是作为一个整体2、作为反向引用,可以使用1 2等引用。

.

匹配任何字符,包括换行符

^

匹配行的开始

$

匹配行的结束

[list]

匹配list中的任单字符,如l,i,s,t

[^list]

反向匹配l,i,s,t

regexp1|regexp2

匹配regexp1或者regexp2

regexp1regexp2

匹配regexp1与regexp2连接

n

匹配换行字符

char

匹配特殊字符,如$, *, ., [, , ,^

4>sed参数详解:

-e<script>或—expression=<script> 以选项中指定的script来处理输入的文本文件。

-f<script文件>或—file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

-h或—help 显示帮助。

-n或—quiet或--silent 仅显示script处理后的结果。

-V或—version 显示版本信息。

5>sed常用命令:

q

退出命令,sed '11 q' /etc/passwd 相当于head /etc/passwd

d

删除命令,sed '1 d' /etc/passwd 删除第一行

p

打印命令,一般与-n选项连用

6>替换命令s:

命令的格式为:s/regexp/replacement/flags

把root替换成rooter

sed 's/root/rooter/' /etc/passwd

replacement可以是n(n为1到9的数字),表示引用regexp里的(matching):如

echo "123abc" | sed 's/([0-9]*).*/1/’

([0-9]*).*匹配了123abc,而([0-9]*)匹配123,所以1内容为123,所以这个例子的结果为123。

flags的可选值如下:

g

将replacement应用于所有reqexp所匹配的,不仅仅是第一个的匹配。

number

只替换第n个的匹配

p

当替换已经完成,打印新的结果

w file-name

当替换完成,把新结果保存到文件

I

i

忽略大小写。

7>不常用的几个命令:

y/source-chars/dest-chars/

source-chars与dest-chars长度要相同,转换是一一对应的,如a转换成A,b转换成B:sed ‘y/ab/AB/’

a

text

在指定位置增加内容,如在含有root下一行增加I am root:

sed ‘/root/ aI am root’ /etc/passwd

i

text

在指定位置插入内容,如在含有root上一行增加I am root:

sed ‘/root/ iI am root’ /etc/passwd

c

text

用text替换匹配的行,如把含有root的行内容替换为I am root:

sed ‘/root/ cI am root’ /etc/passwd

=

打印行号,如显示含有root所在的行号:sed -n ‘/root/=’ /etc/passwd

l n

以n个长度分割匹配到的行,并以结尾,如以长度为4个字符分隔含有root的行:sed ‘/root/ l 4′ /etc/passwd

r filename

读取文件到输出,如在含有root的行下面插入file文件:sed ‘/root/r file’ /etc/passwd

w filename

保存输出流到文件,如保存含有root的行到file文件:sed ‘/root/w file’ /etc/passwd

N

增加一行并附下一行内容,如两行合并成一行:sed ‘N;s/n//’ /etc/passwd

7>选择性的显示行:

# 显示文件中的前10行 (模拟“head”的行为)

1.sed 10q /etc/passwd

# 显示文件中的第一行 (模拟“head -1”命令)

1.sed q

# 只显示匹配正则表达式的行(模拟“grep”)

1.sed -n '/regexp/p' # 方法1

2. sed '/regexp/!d' # 方法2

# 显示包含“AAA”、“BBB”或“CCC”的行(任意次序)

1.sed '/AAA/!d; /BBB/!d; /CCC/!d' # 字串的次序不影响结果

# 显示包含65个或以上字符的行

1.sed -n '/^.\{65\}/p'

# 显示包含65个以下字符的行

1.sed -n '/^.\{65\}/!p' # 方法1,与上面的脚本相对应

2. sed '/^.\{65\}/d' # 方法2,更简便一点的方法

# 从第3行开始,每7行显示一次

1.sed -n '3~7p' # 只对GNU sed有效

2. sed -n '3,${p;n;n;n;n;n;n;}' # 其他sed

5>插入一行:

插入一行

14. sed ‘3 i/haha‘ a.txt 在第三行的位置插入一行haha

添加一行

15. sed ‘3 a/haha‘ a.txt 在第三行后的位置插入一行haha

替换整行

16. sed ‘3 c/haha‘ a.txt 将第三行整行替换为haha

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值