sed命令浅析

写在前面:

博客书写牢记5W1H法则:What,Why,When,Where,Who,How。



本篇主要内容:

● sed 命令用法



sed

stream editor for filtering and transforming text

sed会将整行读取到模式空间(pattern space),在模式空间进行处理后,根据处理动作进行操作(默认输出),直到读取新的行,将模式空间的原有行覆盖,除非手动干预。而模式空间的内容也可以转移到保留空间,保留空间可以保留更多行,以供其他操作。

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

OPTION

-n, --quiet, --silent:取消默认的打印行为

-e script, --expression=script:指定一个新的表达式,可以有多个同时使用

-f script-file, --file=script-file:指定脚本文件

-i[SUFFIX], --in-place[=SUFFIX]:直接修改原文件内容

-c, --copy:与-i一起使用,修改原文件的同时,将未修改的文件复制一份并命名为“原文件名+c”

-r, --regexp-extended:支持正则表达式

-z, --null-data:以空字符(null)分割行。可以指定此选项,来保证只处理第一个找到的行

script:

[地址定界] [字符处理或整行处理]

中间以空格隔开,可以多个空格

地址定界:

空:每一行

#:指定某行

#,#...:指定某几行

#,+#:从第#行开始的,往后#行

$:最后一行

1~2:从第1行开始,步进为2。即所有奇数行

5,~3 :从第5行开始,直到3的第一个整数倍的行停止

/regexp/ 或 \0regexp0:正则表达式匹配的行,"0"也可替换为其他字符

#,/PAT1/:从第#行开始,知道匹配到PAT1的行

/PAT1/,/PAT2/:从匹配到PAT1的行开始,到匹配到PAT2的行结束

整行处理:

仅对匹配空间的行进行处理操作。

= :显示行号。会在行的前面新建一行行号

a \TEXT :在匹配到的行的下方插入一行,内容为TEXT。"/"标记TEXT的开头。

i \ :在匹配到的行的上方插入一行,内容为TEXT。"/"标记TEXT的开头。

q [退出码] :执行完本行处理后立即退出。如果给出退出码,则将退出码设置为指定退出码。

Q [退出码] :不执行本行处理,直接退出。如果给出退出码,则将退出码设置为指定退出码。

r FILENAME :读取FILENAME的内容,并插入到匹配行的行后

R FILENAME :读取FILENAME的内容,并一行行插入到匹配行的行后。如第1个匹配到的行的行后只会插入文件的第1行,第2个匹配到的行行后插入文件的第2行。

c \TEXT :替换匹配行的内容为TEXT

d :删除匹配到的行

h H :读取/追加模式空间内容到保留空间

g G :读取/追加保留空间内容到模式空间

n N :读取/追加下一行到模式空间

p :打印当前模式空间内容

w filename :将模式空间内容另存为filename文件

字符处理:

s/regexp/replacement/ :替换匹配到的行的指定字符串

y/source/dest/ :单字符替换

实例:

-z选项用法:
(一)
[[email protected] ~]# echo -e "hello fred\nhello" | sed  "s:hello:222:" 
222 fred
222
[[email protected] ~]# echo -e "hello fred\nhello" | sed -z "s:hello:222:" 
222 fred
hello
(二)
[[email protected] ~]# cat t.txt
123
skldfjksladfjsdf
123111111111
[[email protected] ~]# sed "s:123:tttttttttttt:" t.txt
tttttttttttt
skldfjksladfjsdf
tttttttttttt111111111
[[email protected] ~]# sed -z "s:123:tttttttttttt:" t.txt
tttttttttttt
skldfjksladfjsdf
123111111111

#为每一行行后都添加一行

[[email protected] ~]# cat test.txt 
1 23
123456
124356
echo123
[[email protected] ~]# sed ‘a             new line‘ test.txt 
1 23
new line
123456
new line
124356
new line
echo123
new line
[[email protected] ~]# sed ‘a    \   new line‘ test.txt 
1 23
   new line
123456
   new line
124356
   new line
echo123
   new line

#查找特定行并指定退出码退出

[[email protected] ~]# sed ‘/^123/q4‘ test.txt 
1 23
123456
[[email protected] ~]# echo $?
4
[[email protected] ~]# sed ‘/^123/Q18‘ test.txt 
1 23
[[email protected] ~]# echo $?
18

#将file的内容追加到test.txt的尾部

[[email protected] ~]# cat > file << eof
> this is line1.
> eof
[[email protected] ~]# sed ‘$rfile‘ test.txt 
1 23
123456
124356
echo123
this is line1.

#获取"ip addr show"的输出,并用sed得到IP和掩码

[[email protected] ~]# ip addr show > ipinfo 
[[email protected] ~]# sed -n ‘/[[:space:]]\+inet /s:[^0-9]*\([0-9.]\+\/[0-9]\+\).*:\1:p‘ ipinfo
127.0.0.1/8
172.18.31.7/16
172.18.252.42/16

#高级用法实例

sed  -n  ‘n;p‘  FILE     #显示偶数行;
sed  ‘1!G;h;$!d‘  FILE     #逆序显示文件的内容;
sed  ’$!d‘  FILE     #取出最后一行;
sed  ‘$!N;$!D‘ FILE     #取出文件后两行;
sed ‘/^$/d;G‘ FILE     #删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
sed  ‘n;d‘  FILE     #显示奇数行;
sed ‘G‘ FILE     #在原有的每行后方添加一个空白行;
时间: 2024-12-18 09:39:04

sed命令浅析的相关文章

学习笔记之sed命令使用

一.概述 1.  sed 全称为Stream Editor,就是行编辑器,意味着一次只处理一行文本,sed将被匹配到            的行放到自己特定的空间(通常称为模式空间)中进行编辑:然后再根据结果进行输出显示: 2.  在sed中还有一段空间称为保持空间,sed模式空间中的内容可以与保持空间的内容可以进            行自由互换,实际工作中用处很少,仅作参考: Sed工作流程如图 二.sed命令使用 sed [OPTION]... 'script' [input-file].

sed命令

文本处理三剑客: grep, egrep, fgrep:文本过滤器 sed:Stream EDitor,流编辑器,行     pattem space:模式空间.(基础)     hold space:保持空间 awk:文本格式化工具,报告生成器 语法 sed [OPTION]...  'script'  [input-file] ... script:     地址定界编辑命令         :%s/ 常用选项: -n:不输出模式空间中的内容至屏幕: -e script, --express

sed命令及vim的末行命令

sed:StreamEDitor,流编辑器,以行为单位对一个或多个文件进行编辑处理:每一次sed都会处理给定文件中的一行内容. 在sed处理文本时,将正在处理的当前行存储到临时的缓冲区中,称为"模式空间":用当前行去匹配给定的PATTERN,如果能匹配,则使用command编辑处理:如果不匹配,则默认输出至标准输出:然后继续处理下一行,直到文件的末尾. 默认情况下,sed的所有处理行为不会影响源文件的内容: 我们一般会使用sed命令来自动编辑一个或多个文件,简化对文件的循环操作: se

sed命令总结

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 什么是sed? sed是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结构.默认情况下,所有的输出行都被打印到屏幕上. sed的处理过程是什么? sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下:首先sed先把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每

linux sed命令详解

Linux环境:Ubuntu16.04 sed命令 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html http://blog.csdn.net/yiqingnian28/article/details/23133043 正则表达式 http://blog.csdn.net/wzzfeitian/article/details/8842371 sed -help 查看sed的用法 -n, --quiet, --sile

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

sed命令应用详解

sed应用详解 sed是文本处理处理工具"三大剑客"之一,它 是一种流编辑器,sed一次只处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.sed不会修改原文件内容,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 用法:sed [OPTION]

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 {