文本三剑客sed

我以前的文章介绍过grep了,今天我就来说一下第二个sed,它是stream editor的缩写。在Linux的文本文件中文本存储都是一行,显示时表现的多行其实都是因为有换行符的存在,例如:文本是:abc$def$ghi 显示出来就是三行了。Sed就是一个行编辑器,它一次读一行文本进行操作,然后根据我们的选择看是否同步到文本之中。还有一个叫awk的,在Linux上叫做gawk(gnu awk),它是一个文本格式化工具,我们下一篇文章再说。

工作机制:每次读取一行文本至"模式空间(pattern space)"中,在模式空间中完成处理;将处理结果输出至标准输出设备;

语法:sed [OPTION]... {script} [input-file]...

-r: 支持扩展正则表达式;

-n: 静默模式;

-e script1 -e script2 -e script3:指定多脚本运行;

-f /path/to/script_file:从指定的文件中读取脚本并运行;

-i: 直接修改源文件;

地址定界:

#: 指定行;

$: 最后一行;

/regexp/:任何能够被regexp所匹配到的行;sed ‘/^#/d‘ /etc/fstab #删除以井号开头的行

\%regexp%:同上,只不过换作%为regexp边界符;

/regexp/| :匹配时忽略字符大小写;

\%regexp%| :匹配时忽略字符大小写;

startline,endline:

#,/regexp/:从#行开始,到第一次被/regexp/所匹配到的行结束,中间的所有行;

#,#

/regexp1/,/regexp2/:从第一次被/regexp1/匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间的所有行;

#,+|-n:从#行开始,一直到向下的n行;

first~step:指定起始行,以及步长;

sed的编辑命令

d: 删除模式空间中的行;sed ‘1,2d‘ /etc/fstab

=:显示行号;sed ‘/^#/=‘ /etc/fstab #显示以#号开头的行的行号

a \text:附加text;sed ‘/^#/a \new line‘ /etc/fstab#在以井号开头行的后面添加new line字样

sed ‘1a \new line\nsecond line\ntherid line‘ #\n表示换行符

i \text:插入text,支持\n实现多行插入;

c \text:用text替换匹配到的行;sed ‘/5,7/c \new txt‘#五到七行都替换成一个new txt

sed ‘/^#/c \new txt‘ /etc/fstab#只有井号开头的行都替换成new txt,不只一个

p: 打印模式空间中的行;sed ‘5,7p‘ /etc/fstab#5-7行的内容显示两遍,使用-n才符合我们的期望

s/regexp/replacement/:替换由regexp所匹配到的内容为replacement;

g: 全局替换;

i: 不区分大小写#sed ‘s/^#//g‘ /etc/fstab

w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中;

# sed ‘5,9w /tmp/test1.txt‘ /etc/fstab#将fstab中的5-9行写到test1.txt中

r /path/from/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并;

#sed ‘8r /etc/issue‘ /etc/fstab#将issue的第8行之后的内容读进来放到fstab之前

练习:

(1) 删除/boot/grub/grub.conf文件中所有行的行首的空白字符;

sed ‘s/^[[:space:]]\+//‘ /boot/grub/grub.conf

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

sed ‘s/^#[[:space:]]\+//‘ /etc/fstab

(3) 把/etc/fstab文件的奇数行另存为/tmp/fstab.3;

sed ‘1~2w /tmp/fstab.3‘ /etc/fstab

(4) echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名;

取基名:echo "/etc/sysconfig/network-scripts/" | sed ‘[email protected]^.*/\([^/]\+\)/\[email protected]\[email protected]‘

取路径名:echo "/etc/sysconfig/network-scripts/" | sed ‘[email protected][^/]\+/\[email protected]@‘

Sed不仅有一个模式空间,还有一个保持空间,它可以帮助sed暂时存储一些东西以便后续的使用。

高级命令:

h:用模式空间中的内容覆盖保持空间的内容;

H:把模式空间中的内容追加至保持空间中内容的后面;

g:从保持空间中取到其内容,并将其覆盖模式空间中的内容;

G:从保持空间中取到其内容,并将其追加在模式空间中的内容的后面;

x:把保持空间和模式空间中的进行交换;

n:读取匹配到的行的下一行至模式空间;(会覆盖模式空间中的原有内容);

N:读取匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面;

d:删除模式空间中的内容;

D:删除多行模式空间中的首行;

注意:命令功能可使用!取反;分号可用于分隔脚本;

示例:

sed ‘G‘ /etc/issue: 在文件中的每行后方添加空白行;

sed ‘$!d‘ /etc/fstab:保留最后一行;

sed ‘/^$/d;G‘ /etc/issue: 保证指定的文件每一行后方有且只有一个空白行;

sed ‘n;d‘ /etc/issue:保留奇数行;

sed -n ‘1!G;h;$p‘ /etc/issue :全文倒叙显示

sed ‘$!N;$!D‘ /etc/issue:显示最后两行

时间: 2024-11-10 22:26:49

文本三剑客sed的相关文章

文本三剑客之一 “sed”的基础用法和高级用法

sed工具: 用法: sed [option]- 'script' inputfile- 常用选项: -n:不输出模式空间内容到屏幕,即不自动打印[[email protected] ~]# sed -n -e "2p" -e "6p" f1 (2:6代表处理第几行)-e: 多点编辑-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本-r: 支持使用扩展正则表达式-i.bak: 备份文件并原处编辑 script: '地址命令' 地址定界: (1) 不

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 1.grep 1.1 什么是grep和egrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Global

文本三剑客(grep、sed、awk)

文档:文本三剑客(grep.sed.awk).note链接:http://note.youdao.com/noteshare?id=d6b2cb636b40803cf543f3f0b44bed9f&sub=1D4DA6B89EC74E9597672AADF0CE3894 原文地址:https://blog.51cto.com/12928116/2407036

文本处理三剑客SED

文本处理器SED本章内容Sed介绍Sed用法Sed高级用法 处理文本的工具sed?Stream EDitor, 行编辑器?sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.然后读入下行,执行下一个循环.如果没有使诸如'D'的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间.这样不断重复,直到文件末尾.文件内容并没有改变,除

linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)

    运维工程师在做配置的过程中很多时候都需要去获取目标服务器网卡上的IP地址,那究竟用什么方式获取更便捷了,博主今天就带大家使用linux文本三剑客分别获取一下网卡的IP地址,最后我们再来对比一下. 实验环境: 系统:CentOS 7.2 网卡张数:双网卡 linux文本三剑客之grep 获取ifconfig输出中的IP地址 ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\

linux 文件管理和文本三剑客之一grep,以及正则的使用

1:文件权限 用户对文件的访问有三种:r(读),w(写),x.对于文件和目录有点区别. 文件: r:使用文本查看工具可以查看其文件内容. w:使用文本编辑工具可以编辑其文件内容. x:可向内核请求将此文件运行为进城执行. 目录: r:可以使用ls命令列出文件下子目录和文件的列表. w:可以在此目录中创建和删除文件. x:可使用'ls -l'命令列出目录及子目录的文件属性,可以使用cd切换工作目录为制定目录. 文件权限主要针对三类对象进行定义. owner:属主  , group:属组, othe

llinux文本三剑客之grep、egrep及相应的正则表达式和用法

Linux文本三剑客之grep族以及相应的正则表达式 Grep族是什么? Grep族是linux学习中搜索文本的重要工具,它基于使用正则表达式来快速简洁的搜索你想要查看的文本.是搜索文本的不二之选 什么时候及在哪里使用grep呢? 上面咱们说到了,grep是文本搜索工具,所以当我们要搜索文本,有搜索文本的需要时我们就可以是使用grep工具. 下面我们来谈谈如何使用grep族命令以及涉及到的正则表达式的内容 文本搜索工具:grep族:grep, egrep, fgrep Linux上文本处理三剑客

文本三剑客之awk进阶篇

此篇主要讲解awk控制语句,捎带说明getline和NR_FNR命令的使用.其中会用到awk基础知识,若有疑惑,可点击文本三剑客之awk基础篇进行翻阅. 示例文件 以下为通篇会用到的几个示例文件: [[email protected] awk_file]# cat file.txt name yu shu wai rick 80 86 90 long 68 89 78 jack 66 60 82 [[email protected] awk_file]# cat file.txt1 name y

linux三剑客-sed

 sed命令 linux文本处理三剑客 sed stream editor 做为行编辑器,对文本进行编辑(以行为单位进行编辑) 注意:sed编辑文件,却不改变原文件 sed工作原理 制定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换.删除.打印.修改.保存)  用法: sed[option]…{script-only-if-no-other-   script}[input-file