sed:
流编辑器逐行处理文件(或输入),并将结果发送到屏幕.
语法:
sed [-nefr] [[n1[,n2]]动作]
说明: sed首先把当前正在处理的行保存在一个模式空间中,然后处理模式空间中 \
的行,完成后就把该行发送到屏幕上。sed每处理完一行就将其从模式空间 \
中删除,然后将下一行读入,进行处理和显示。直至处理完输入文件的最 \
后一行后. 所以sed命令默认不会修改原文件.
参数说明:
-i : 直接修改读取文件的内容, 而不是从屏幕输出
-n : 安静模式, 只能经过sed特殊处理的那一行(或者动作)才会被列出来.
-f : 将sed的动作写在一个文件内, -f filename则进行filename内的sed \
动作. 即在处理输入时, 将file中指定的命令添加到运行的命令中
-e : 直接在指令列模式上进行sed的动作编辑; 在处理输入时, 将script \
中指定的命令添加到运行的命令中
-r : sed的动作支援的是延伸型正规表示法的语法
n1,n2代表的是地址, 它可以是数字、正则表达式或者二者的结合。
[n1[,n2]]function:
a : 后面可接字符串, 这些字符串新增在指定行后面一行
c : 后面可接字符串, 这些字符串可以替换n1,n2之间的行
d : 删除n1,n2之间的行
i : 后面可接字符串, 这些字符串新增在指定行的前一行
p : 将指定的n1,n2打印出来
r : 将一个独立文件中的数据插入到数据流中
q : 退出sed
s : n1,n2s/old/new/flags, 在n1至n2之间用new替换old的字符串
flags的选项:
1> 数字, 表明新文本将替换第几处模式匹配的地方
2> g, 表明新文本将会替换所有已有文本出现的地方
3> p, 表明替换后的行要打印出来
4> w file, 将替换原来行的结果写到文件中
示例:
删除:
cat -n /etc/passwd | head -n 25 | sed '2,5d'
显示/etc/passwd的前25行, 然后删除第2至第5行.
sed '$d' if.sh
删除if.sh的最后一行
添加:
cat -n /etc/passwd | head -n 20 | sed '2a csflxy'
在第2行后添加一行: csflxy; 2a改成2i就是在第2行前面添加一行:csflxy;
如果要添加的不止一行, 可用\来表示分行.如:
nl /etc/passwd | sed '2a Drink tea or .... \
drink beer ?'
sed '2,3a csflxy' data2
在data2的第二行和第三行前插入csflxy
替换:
cat -n /etc/passwd | head -n20 | sed '2,5c No 2-5 number'
把2-5行的字符串替换成No 2-5 number
打印特定行:
nl /etc/passwd | sed -n '5,7p'
打印出第5至第7的行.
/sbin/ifconfig eth0 | grep 'inet addr' \
| sed 's/^.*addr://g' \
| sed 's/Bcast:.*$//g'
打印出IP地址
sed '/^$/d' regular_express.txt
删除空白行
cat /etc/manpath.config | grep 'MAN' | \
sed 's/#.*$//g' | sed '/^$/d'
提取非#开头的, 带有MAN的行, 且删除空白行
sed -i 's/\.$/\!/g' regular_express.txt
把regular_express内每一行结尾的.替换成!
sed -i '$a # This is a test' regular_express.txt
$代表是最后一行, 而a的动作是新增, 因此该文件最新增一行.
sed -e 's/brown/green/g; s/dog/cat/g' regular_express.txt
使用-e参数, 使用多个处理命令
第一步: 先创建一个script1.sed文件, 里面含有sed编辑命令
第二步: sed -f script1.sed regular_express.txt
sed -n 's/brown/green/w data2' data1
表示将data1的brown字符串替换成green, 然后存储到data2中
数据的搜寻与操作[打印, 删除等]
nl /etc/passwd | sed '/root/d'
删除含有root的行
nl /etc/passwd | sed -n '/root/p'
打印含有root的行, 且只打印符合条件的; 如果不加参数-n
则nl打印出来的记录再加上sed选中含有root的行.
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
搜寻含有root的行, 并把bash替换成blueshell, 最后把其打印出来.
多点编辑:
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
删除/etc/passwd第三行到未尾的行, 然后把bash替换成blueshell.
直接修改文件内容:
sed -i 's/\.$/\!/g' regular_express.txt
sed -i '$a # This is a test' regular_express.txt
流编辑器逐行处理文件(或输入),并将结果发送到屏幕.
语法:
sed [-nefr] [[n1[,n2]]动作]
说明: sed首先把当前正在处理的行保存在一个模式空间中,然后处理模式空间中 \
的行,完成后就把该行发送到屏幕上。sed每处理完一行就将其从模式空间 \
中删除,然后将下一行读入,进行处理和显示。直至处理完输入文件的最 \
后一行后. 所以sed命令默认不会修改原文件.
参数说明:
-i : 直接修改读取文件的内容, 而不是从屏幕输出
-n : 安静模式, 只能经过sed特殊处理的那一行(或者动作)才会被列出来.
-f : 将sed的动作写在一个文件内, -f filename则进行filename内的sed \
动作. 即在处理输入时, 将file中指定的命令添加到运行的命令中
-e : 直接在指令列模式上进行sed的动作编辑; 在处理输入时, 将script \
中指定的命令添加到运行的命令中
-r : sed的动作支援的是延伸型正规表示法的语法
n1,n2代表的是地址, 它可以是数字、正则表达式或者二者的结合。
[n1[,n2]]function:
a : 后面可接字符串, 这些字符串新增在指定行后面一行
c : 后面可接字符串, 这些字符串可以替换n1,n2之间的行
d : 删除n1,n2之间的行
i : 后面可接字符串, 这些字符串新增在指定行的前一行
p : 将指定的n1,n2打印出来
r : 将一个独立文件中的数据插入到数据流中
q : 退出sed
s : n1,n2s/old/new/flags, 在n1至n2之间用new替换old的字符串
flags的选项:
1> 数字, 表明新文本将替换第几处模式匹配的地方
2> g, 表明新文本将会替换所有已有文本出现的地方
3> p, 表明替换后的行要打印出来
4> w file, 将替换原来行的结果写到文件中
示例:
删除:
cat -n /etc/passwd | head -n 25 | sed '2,5d'
显示/etc/passwd的前25行, 然后删除第2至第5行.
sed '$d' if.sh
删除if.sh的最后一行
添加:
cat -n /etc/passwd | head -n 20 | sed '2a csflxy'
在第2行后添加一行: csflxy; 2a改成2i就是在第2行前面添加一行:csflxy;
如果要添加的不止一行, 可用\来表示分行.如:
nl /etc/passwd | sed '2a Drink tea or .... \
drink beer ?'
sed '2,3a csflxy' data2
在data2的第二行和第三行前插入csflxy
替换:
cat -n /etc/passwd | head -n20 | sed '2,5c No 2-5 number'
把2-5行的字符串替换成No 2-5 number
打印特定行:
nl /etc/passwd | sed -n '5,7p'
打印出第5至第7的行.
/sbin/ifconfig eth0 | grep 'inet addr' \
| sed 's/^.*addr://g' \
| sed 's/Bcast:.*$//g'
打印出IP地址
sed '/^$/d' regular_express.txt
删除空白行
cat /etc/manpath.config | grep 'MAN' | \
sed 's/#.*$//g' | sed '/^$/d'
提取非#开头的, 带有MAN的行, 且删除空白行
sed -i 's/\.$/\!/g' regular_express.txt
把regular_express内每一行结尾的.替换成!
sed -i '$a # This is a test' regular_express.txt
$代表是最后一行, 而a的动作是新增, 因此该文件最新增一行.
sed -e 's/brown/green/g; s/dog/cat/g' regular_express.txt
使用-e参数, 使用多个处理命令
第一步: 先创建一个script1.sed文件, 里面含有sed编辑命令
第二步: sed -f script1.sed regular_express.txt
sed -n 's/brown/green/w data2' data1
表示将data1的brown字符串替换成green, 然后存储到data2中
数据的搜寻与操作[打印, 删除等]
nl /etc/passwd | sed '/root/d'
删除含有root的行
nl /etc/passwd | sed -n '/root/p'
打印含有root的行, 且只打印符合条件的; 如果不加参数-n
则nl打印出来的记录再加上sed选中含有root的行.
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
搜寻含有root的行, 并把bash替换成blueshell, 最后把其打印出来.
多点编辑:
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
删除/etc/passwd第三行到未尾的行, 然后把bash替换成blueshell.
直接修改文件内容:
sed -i 's/\.$/\!/g' regular_express.txt
sed -i '$a # This is a test' regular_express.txt