sed命令(1)-基本语法和命令

注:学习sed命令的参考书籍为《Sed&Awk》,所以笔记也都是参考该书。

sed命令的基本语法和命令:

一、sed命令语法

sed [options] {sed-commands} {input-file}

sed是按每行依次读取input-file,然后执行sed-command,执行完的数据写入模式空间。

options是用来传递sed命令的可选参数。

当需要使用多条命令的时候可以使用-e参数,其语法如下:

sed [options] -e {sed-command1} -e {sed-command2} -e {command3} {input-file}

也可以多条命令多行显示,其语法如下:

sed [option] ‘{

>sed-command1

>sed-command2

}‘ {input-file}

当命令过多时,可以将命令写入一个文档中,然后使用-f参数来实现,其语法如下:

sed [options] -f {commands-file} {input-file}

sed命令并不改变文件内容。

二、sed命令的执行流程

1、read(读取):读取一行到模式空间

2、execute(执行):在模式空间里执行命令(多条命令的时候会依次执行)

3、print(打印):将模式空间中经过执行后的内容打印出来,并清空模式空间

4、repeat(重复):按行重复上面的过程

三、打印模式空间(命令p)

1、默认不加[options]的sed命令打印模式空间

语法:sed ‘p‘ {input-file}

[[email protected] ~]# sed ‘p‘ employee.txt

101,John Doe,CEO

101,John Doe,CEO

102,Jason Smith,IT Manager

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

105,Jane Miller,Sales Manager

2、只输出文件内容

语法:sed -n ‘p‘ {input-file}

[[email protected] ~]# sed -n ‘p‘ employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

3、指定地址范围打印

①只打印某一行

语法:sed -n ‘x p‘ {input-file}(x表示某行)

[[email protected]Shell ~]# sed -n ‘2 p‘ employee.txt

102,Jason Smith,IT Manager

②打印第x行到第y行

语法:sed -n ‘x,y p‘ {input-file}(x,y表示某行,当y为$时,即表示从第x行打印至最后一行)

[[email protected] ~]# sed -n ‘1,3 p‘ employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

[[email protected] ~]# sed -n ‘3,$ p‘ employee.txt

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

修改地址范围可以使用逗号、加号和波浪号。

加号+配合逗号使用,可以指定相的若干行,而不是绝对的几行。如 n,+m 表示第 n 行开 始后的 m 行

波浪号~也可以指定地址范围。 它指定每次要跳过的行数。如 n~m 表示从第 n 行开始,每次 跳过 m 行:

1~2 匹配 1,3,5,7,…… (只打印奇数行)

2~2 匹配 2,4,6,8,……

1~3 匹配 1,4,7,10,…..

2~3 匹配 2,5,8,11,…..

匹配模式

sed可以根据行号来进行匹配,那么sed也可以根据文件中的内容来匹配打印

①单条件匹配

语法:sed -n ‘/word/ p‘ {input-file}

[[email protected] ~]# sed -n ‘/101/ p‘ employee.txt

101,John Doe,CEO

②打印首次内容匹配至某行的内容

语法:sed -n ‘/word/,x p‘ {input-file}(当x=$时,那么就直接匹配到最后一行)

[[email protected] ~]# sed -n ‘/102/,3 p‘ employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

如果在第x行没有匹配到word,那么sed会在x行后去匹配,并打印。

③打印匹配两个word之间的行

语法:sed -n ‘/word1/,/word2/ p‘ {input-file}

[[email protected] ~]# sed -n ‘/102/,/104/ p‘ employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

④ 打印匹配word的行和其后面的x行

语法:sed -n ‘/word/,+x p‘ {input-file}

[[email protected] ~]# sed -n ‘/102/,+2 p‘ employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

四、删除行(命令d)

在前面的打印模式,我们用到的命令是p,那么如果要删除某行的时候我们应该使用的命令是d,接下来,就来了解一下删除行命令d的使用方法。

使用命令d删除的也只是模式空间里的内容,并不对源文件进行修改。

①默认使用删除命令d

因为sed默认匹配的是所有的行,所以在使用命令d的时候如果不指定地址范围,那么默认是会将模式空间的内容全部删除,即输出为空。

语法:sed ‘d‘ {input-file}

②只删除某行

语法:sed ‘x d‘ {input-file}

[[email protected] ~]# sed ‘2 d‘ employee.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

③删除指定范围行

语法:sed ‘x,y d‘ {input-file}(当y=$时,即从x行打印到最后一行)

[[email protected] ~]# sed ‘1,4 d‘ employee.txt

105,Jane Miller,Sales Manager

④与p命令相同,d命令也可以对word进行匹配

语法:sed ‘/word/ d‘ {input-file}

[[email protected] ~]# sed ‘/101/ d‘ employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

我们不难看出其实d命令与p命令的用法基本相同。接下来介绍几个比较特殊的用法

⑤删除所有的空行

语法:sed ‘/^$/ d‘ {input-file}

[[email protected] ~]# sed -n ‘p‘ employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

[[email protected] ~]# sed ‘/^$/ d‘ employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

⑥删除所有注释行(假设注释行是以#开头)

语法:sed ‘/^#/ d‘ {input-file}

五、把模式空间的内容写入到文件中(命令w)

w命令可以将当前模式空间的内容写入到文件中,其用法与p命令及d命令相同,都是在其指定的地址范围内操作。

例如:sed -n ‘2 w output.sed‘ employee.txt

上面语句的意思就是将employee.txt文件中的的第二行内容写入到output.sed文件中,其写入的本质是每次都将output.sed文件中的内容覆盖。

注:学习sed命令的参考书籍为《Sed&Awk》,所以笔记也都是参考该书。

+1

时间: 2024-12-26 09:37:01

sed命令(1)-基本语法和命令的相关文章

安装loadrunner时出现”命令行选项语法错误键入命令 \?获得帮助“的解决方法

安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入"命令/?"可获取帮肋信息1.进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET 2.安装:LRVS2005IDEAddInSetup.exe 2.再安装loadrunner

puppet语法与命令详解

在学习Puppet语法之前需要掌握Puppet中资源.属性.类.模块.变量.参数.节点等相关概念. 资源:资源可以是文件.服务.软件包.自定义脚本等. 属性:资源需要定义相关的属性值,否则毫无意义. 类:将多个资源组织起来进行重新定义. 模块:多个类的合集. 变量:Puppet与其他语言类似,同样支持变量. 参数:又称参变量. 节点:Puppet每一个客户端,即主机(Host). 资源: 每个资源的定义都具有标题.类型,以及一系列的属性.每个资源在Puppet中名称必须唯一. 例如Puppet管

C# SQLite 创建数据库的方法增删查改语法和命令

SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页:http://www.sqlite.org/index.html   cmd下sqlite的使用网 1:选择下载对应自己系统的sqlite.3exe文件 2:解压后使用cmd命令进入sqlite3.exe文件所在的路径执行命令就可以操作做相应的操作. 在进入数据库之后如果需要退出的话windows

shell基本语法和命令

执行脚本 编写一个简单的脚本test.sh: #! /bin/sh cd .. ls Shell脚本中用#表示注释,相当于C语言的//注释.但如果#位于第一行开头,并且是#!(称为Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执行.如果把这个脚本文件加上可执行权限然后执行: chmod a+x test.sh ./test.sh Shell会fork一个子进程并调用exec执行./test.sh这个程序,exec系统调用应该把子进程的代码段替换成./test.sh程序

linux命令详解之useradd命令使用方法

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也可以帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和各自的口令.用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录. 实现用户账号的管理,要完成的工作主要有如下几个方面: 用户账号的添加.删除与修改. 用户口令

8.1 shell 介绍、8.2 命令历史、8.3 命令补全与别名、8.4 通配符、8.5 输入输出重定向

8.1 sehll 介绍 什么是shell shell 是一个命令解释器,提供用户和机器之间交互 支持特定的语法,比如逻辑判断,循环. 每个用户都可以有自己特定的shell. centos7 默认的shell 为bash( Bourne Agin shell ) 还有zsh ,ksh等 8.2 命令历史 /root/.bash_history ;命令历史放置文件 [[email protected] ~]# ls /root/.bash_history/root/.bash_history [[

linux命令(8)---简单文本处理命令

sort命令,sort lines of text files [功能]:将文本内容按照指定的排序,并将其内容显示在标准输出上,默认sort filename表示默认第一字符,按照升序查看文件, [语法] sort options filename [常用选项] -r,表示按照第一字符默认降序查看文件(逆序显示) -f,--ignore-case:表示忽略大小写,linux系统默认区分大小写 -t,--field-separator=SEP:表示指定分隔符 -k,--key=POS1[,POS2

Linux命令之目录管理类命令:mkdir, rmdir, tree, dirname, basename

mkdir命令:新建目录 语法:mkdir [OPTION] /PATH/TO/SOMEWHERE 常见参数选项: -p:创建父目录 -v: 显示创建过程 示例: 如何/tmp/下创建目录:x_m, x_n, y_m, y_n # mkdir /tmp/{x_,y_}{m,n} rmdir命令:删除目录 语法:rmdir /PATH/TO/SOMEWHERE 常见的参数选项: -p:连同上层的空目录一起删除(慎重使用) tree命令:以树状图列出目录的内容 语法:tree [OPTION]...

Linux常用命令(一)-管理文件和目录命令(2)-ls命令

注:非原创,大部分为摘录 英文全名:List 即列表的意思. 1.命令格式 ls [选项] [目录名] 2.命令功能 列出目标目录中所有的子目录和文件 3.常用参数 -a,–all  列出目录下的所有文件,包括以 . 开头的隐含文件 -A  同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录). -c   配合 -lt:根据 ctime 排序及显示 ctime (文件状态最后更改的时间)配合 -l:显示 ctime 但根据名称排序否则:根据 ctime 排序 -C  每栏由上