sed简单应用

一、sed应用

处理文本的工具sed

Stream EDitor, 行编辑器

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

sed工具

用法:

sed [option]... ‘script‘ inputfile...

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本

-r 支持使用扩展正则表达式

-i.bak 备份文件并原处编辑

script:
‘地址命令

地址定界:

(1) 不给地址:对全文进行处理

(2) 单地址:
“#: 指定的行,$:最后一行

/pattern/:被此处模式所能够匹配到的每一行

(3) 地址范围:

“#,#”

“#,+#“

/pat1/,/pat2/

“#,/pat1/”

(4) ~:步进

1~2 奇数行

2~2 偶数行

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环

p 打印当前模式空间内容,追加到默认输出之后

a []text 在指定行后面追加文本,支持使用\n实现多行追加

i []text 在行前面插入文本

c []text 替换行为单行或多行文本

w /path/file 保存模式匹配的行至指定文件

r /path/file 读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

s/// 查找替换,支持使用其它分隔符,[email protected]@@,s###

替换标记:

g 行内全局替换

p 显示替换成功的行

w /PATH/FILE 将替换成功的行保存至文件中

二、实验

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符

sed -nr "s/^[[:space:]]//p" /etc/grub2.cfg
-r  支持扩展正则表达式
s///  替换

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

sed -r ‘/^#[[:space:]]+/d‘ /etc/fstab

3、在centos6系统/root/install.log每一行行首增加#号

sed ‘s/^/#/‘ /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号

sed ‘[email protected]^[^#]@#&@‘ /etc/fstab
s//&/  后项引用

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

echo "/etc/sysconfig/network-scripts/"|sed -r ‘[email protected](^/.*/)([^/]+/?)@\[email protected]‘取基名 echo "/etc/sysconfig/network-scripts/"|sed -r ‘[email protected](^/.*/)([^/]+/?)@\[email protected]‘取目录名
s/()()/\1/ 后项引用
s/()()/\2/

6、利用sed 取出ifconfig命令中本机的IPv4地址(不同版本名称不同,写路径时注意.)

ifconfig|sed -n ‘2p‘|sed ‘s/^.*r://‘ |sed ‘s/ .*//‘
ifconfig|sed -n ‘2p‘|sed ‘s/^[[:space:]].*r://‘|sed ‘s/[[:space:]].*//‘
ifconfig|sed -n ‘2p‘|sed -e ‘s/^[[:space:]].*r://‘ -e ‘s/[[:space:]].*//‘
ifconfig|sed -n -e ‘2s/^[[:space:]].*r://‘ -e ‘2s/[[:space:]].*//p‘
ifconfig ens33|sed -n ‘2p‘|sed -r ‘[email protected]^[[:space:]].*t[[:space:]]@@‘ 取broadcast地址
ifconfig ens33|sed -n ‘2p‘|sed -r ‘[email protected]^[[:space:]].*inet[[:space:]]@@‘|sed -r ‘[email protected][[:space:]].*@@‘
ifconfig ens33|sed -n ‘2p‘|sed -r -e ‘[email protected]^[[:space:]].*inet[[:space:]]@@‘ -e ‘[email protected][[:space:]].*@@‘
ifconfig|sed -n ‘2p‘|sed -r ‘[email protected]*inet[[:space:]](.*)[[:space:]]net.*@\[email protected]‘

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数(不同版本路径不同,写路径时注意.)

ls /misc/cd/Packages/|grep "rpm$"|sed -r ‘[email protected]*\.(.*)\[email protected]\[email protected]‘|sort|uniq -c
ls /misc/cd/Packages/|grep "rpm$"|sed -e ‘[email protected][email protected]@‘ -e ‘[email protected]*\[email protected]@‘|sort|uniq -c
ls /misc/cd/Packages/|rev|cut -d. -f2|sort -nr|rev|uniq -c|sort -nr|head -n3

8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

cat /etc/init.d/functions|tr -c ‘[:alpha:]‘ ‘\n‘|tr -s ‘\n‘|sort|uniq -c|sort -nr

grep -Eo "\<[[:alpha:]_]+[[:alnum:]]+\>" /etc/init.d/functions|sort|uniq -c|sort -n 

sed -nre ‘s/[^[:alnum:]]+/\n/g‘ -e ‘s/[0-9]/\n/gp‘ /etc/init.d/functions|sort|uniq -c|sort -n 

9、将文本文件的n和n+1行合并为一行,n为奇数行

nl /etc/passwd|sed -n ‘N;s/\n//p‘

END

原文地址:http://blog.51cto.com/yy1109lll/2299489

时间: 2024-10-19 08:25:04

sed简单应用的相关文章

LINUX&mdash;SED简单使用

SED简介 sed 全名叫 stream editor,流编辑器,用程序的方式来编辑文本. SED使用 替换参数s #使用yours替换my,g表示替换改行所有匹配项 sed "s/my/yours/g" demo.txt #指定行替换 sed "3s/my/yours/g" demo.txt #指定多行替换 sed "3,6s/my/yours/g" demo.txt #只替换每行第二个 sed "s/my/yours/2"

sed简单使用(三)替换

sed使用记录. 文本替换 0. 测试用的文件内容 1. 删除前导空白字符 2. 删除拖尾空白字符 这个看不出效果 3. 删除前导和拖尾空白字符 拖尾的删除还是看不出效果 4. 每行开关处插入5个空格 5. 以79个字符为宽度, 将文本右对齐 上面看起来没有右对齐的, 是因为后面有空格或制表符 6. 居中文件内容, 以79个字符为宽度 7. 查找字符并将找到的字符串替换成指定的字符串 a. 只替换每行中的第一个匹配串 b. 只替换每行中的第二个匹配串 c. 替换每行中的全部匹配串 d. 替换倒数

sed简单使用(四)选择性显示

sed使用,选择性的显示一些内容 1.显示前面的行 显示前10行 sed 10q file 显示一行是这样的 2. 最后的行 显示最后10行 sed -e :a -e '$q;N;11,$D;ba' /etc/passwd 显示最后2行 显示最后1行.两种方法 显示倒数第2行.3种方法达到同一效果 3. 显示匹配行 只显示匹配行 反之,只显示不匹配行.2种实现 4. 显示匹配行前后的行 显示匹配行前一行,但不显示匹配行 显示匹配行后一行,但不显示匹配行 显示匹配行及前后一行,并加上行号 5. 显

sed 简单修改配置文件ip地址

sed -i 's/old ip/new ip/g' file.txt

sed简单用法

-n∶取消默认的输出,使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑 -f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作 -r∶sed 的动作支援的是延伸型正则表

sed简单用法示例

sed -n '11,$s/.*/&aaa/p' passwd 在11行至最后一行每行行尾添加aaa "&"表示正则表达式匹配的字符串 sed -nr '$s/(\w+)(.*\W)(\w+)/\3\2\1/p' 将最后一行中第一个单词和最后一个单词调换位置 "\w"表示A-Z,a-z,0-9,_中任意一个,"\W"与"\w"相反,"\3\2\1"表示圆括号中匹配的字符,第一个括号的字  

shell - sed 简单使用记录

时间长不用,总是会忘掉的........还是烂笔头好些. sed 命令使用帮助及实操举例 功能:主要用来对一个或多个文件进行编辑,简化对文件的反复操作. 语法: sed [-hnV] [-e<script>][-f<script文件>][文本文件] 参数: -e <script> 根据script指定的脚本来处理输入的文本文件,这个只实现了屏幕打印修改后的效果.并没有实际修改文件 -f<script文件>:这里是指定执行 script脚本文件 -h:帮助 -

sed简单使用(五)选择性删除

选择性删除某些内容 1. 只显示匹配区间外的行 2. 删除连续的重复行 上图中不相邻的重复行不会删除 3. 删除重复行 ??? 4. 删除重复行外的所有行 上图中,不连续的重复行也删除了 5. 删除前几行 6. 删除最后一行 7. 删除最后两行 8. 删除后10行.两种方法 9. 删除8的倍数行 文件内容 处理后的输出 另一种实现 10. 删除匹配行 11. 删除空行 另一实现方法 12. 删除多个空行,保留第一个空行 另一实现 13. 保留多个空行的前两行 14.  删除文件顶部所有空行 15

sed简单使用(一)加空行

记几个例子备查 0. 测试文件内容 1. 在文本后面增加一空行 2. 增加两个空行 3. 不管有没有空行, 保证只有一个空行 4. 在匹配行之前加空行 5.  在匹配行之后加入空行 6. 在匹配行前后都加空行