linux中sed命令的使用(绝对精华版)

sed命令是linux或者shell编程中常用的筛选、替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的

下面把sed主要的用法列出来(有错误的地方大家可以指正):

p命令
只打印第三行,没有-n会在第三行后多打印第三行:
sed -n ‘3p‘ filename

只打印最后一行:
sed -n ‘$p‘ filename

只打印10到20行(包括10和20行,若后面数字小于前面数字,则只打印前面数字的行):
sed -n ‘10,20p‘ filename

打印包含My在行尾的行到包含You的行:
sed -n ‘/My$/,/You/p‘ filename

打印匹配行和接着的5行:
sed -n ‘/My/,+5p‘ datafile

打印匹配行和下面行号为5的行,直到结尾:
sed -n ‘/My/,~5p‘ datafile

打印5倍数的行:
sed -n ‘0~5p‘ file
sed ‘0~5!d‘ file

----------------------------------------------------------

P命令
打印模式空间中第一个换行符前的内容

其实就是打印单数行

---------------------------------------------------------

d命令
删除第五行并打印其他行:
sed ‘5d‘ filename
删除包含My的行到包含You的行,不打印:
sed -n ‘/My/,/You/d‘ filename
删除包含My的行到第八行,不打印其他行:
sed -n ‘/My/,8d‘ filename

---------------------------------------------------------
D命令
删除模式空间中第一个换行符前的内容

其实就是打印双数行

---------------------------------------------------------

s命令
一个字符串替换另一个
sed ‘s/^My/You/g‘ datafile
g表示行内全局替换,也可用数值代替
3g表示从第三个匹配到的开始全局替换

sed -n ‘1,20s#My$#You#gp‘ datafile
打印1到20行内以My结尾的替换为You的行
注:紧跟s的符号为分隔符,除了换行符反斜杠

sed ‘s/^My/You/g;s/are/Are/g‘ datafile
同时替换多个

sed ‘/ABC/!s/^My/You/g;s/are/Are/g‘ datafile
替换不包含ABC的行

---------------------------------------------------------

r命令
sed ‘/^My/r datafile1‘ datafile2
把datafile1中的所有内容插入到在datafile2中以My开头的行之后

---------------------------------------------------------

w命令
sed ‘/^My/w datafile1‘ datafile2
把在datafile2中以My开头的行写入到datafile1中

---------------------------------------------------------

a命令
在查找到的行后追加,有\,则直接跟文本
sed ‘/My/a\hi,world\nhow are you‘ datafile
同r命令,只不过是写入一段文字

---------------------------------------------------------

i命令
当前行的前面插入新的文本
sed ‘/My/i\hi,world\nhow are you‘ datafile
用法同a\,只是文本插入到前面

---------------------------------------------------------

c命令
将查到的文本修改成新文本
sed ‘/My/c\hi,world\nhow are you‘ datafile
用法同a\和i\

---------------------------------------------------------

N命令
将下一行输入追加到模式空间以\n分隔
sed ‘/My/{N;s/My/Your/;}‘ datafile
若最后一行为奇数行,则N后面命令也不执行

---------------------------------------------------------
n命令
将下一行输入读入到模式空间

---------------------------------------------------------

y命令
sed ‘1,5y/abcd/ABCD/‘ datafile
把abcd都换成大写,和s命令一样/可以换
用法同tr命令

---------------------------------------------------------

q命令
退出命令
sed ‘/My/{q;s/My/Your/;}‘ datafile
不会执行s/My/Your/

---------------------------------------------------------

h/H命令和g/G命令
h清除缓冲区内容,保存最近执行h模式内容
H把匹配到内容追加保存在缓冲区
g把缓冲区内容替换掉模式内容
G把缓冲区内容追加到模式空间行后
sed -e ‘/My/h‘ -e ‘$g‘ datafile
sed -e ‘/My/H‘ -e ‘$G‘ datafile

g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G: 将hold space中的内容append到pattern space\n后
h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H: 将pattern space中的内容append到hold space\n后
x: 交换pattern space和hold space的内容

---------------------------------------------------------

x命令
交换保持空间和模式空间的内容

---------------------------------------------------------

l命令
显示特殊字符,不显示乱码
sed -n ‘1,$l‘ f1

---------------------------------------------------------

-f参数
sed -n -f script datafile

---------------------------------------------------------

-i参数
直接修改文件,不会打印,如:
sed -i G datafile
把datafile中每行后面加个空行(G)

sed -i ‘s/^My/You/g‘ datafile
在文本中直接替换

sed -i ‘/My/{x;p;x}‘ datafile
在有My行前面加一空白行

sed -i ‘$!N;/^\(.*\)\n\1$/!P;D‘ datafile
删除相邻的重复行,只保留第一行

---------------------------------------------------------
-i.bak
修改原始文件并创建原始文件副本
sed -i.bak ‘s/^My/You/g‘ datafile
修改datafile并创建一个datafile.bak的备份

---------------------------------------------------------

-e参数
sed命令中进行多重编辑
sed -n -e ‘/My$/‘ -e ‘s/My/You/gp‘ datafile
先打印以My结尾的行,再执行替换语句

---------------------------------------------------------

=命令
打印行号:
sed -n ‘=‘ f1

$=  计算文本行数
sed -n ‘$=‘ datafile1 datafile2...

---------------------------------------------------------

$!除了最后一行
4!除了第四行
sed ‘4! s/My/Your/g‘ datafile
除了第四行都执行替换

---------------------------------------------------------

b命令
标签,可以跳转到标签执行,如
sed ‘/^My/byyc;s/^/#/;b;:yyc;s/^My/Your/ datafile
如果是My开头则换成Your,否则行前加#

---------------------------------------------------------

sed正则表达式
\     不转义,即元字符照常打印
^    以字符串开头,如/^My/以My开头的行
$   以字符串结尾,如/My$/以My结尾的行
.    匹配一字符,如/M..y/M和y间有俩字符
*   匹配0个或多个前面的字符
[]   匹配里面的单字符,如/[Mh]y/匹配My和hy
[^]  匹配不在里面的字符
      如/[^Mh]y/匹配不是My和hy
\(..\) 保存已经匹配的字符,用\n来呼出
     如1,20s/\(you\)self/\1r/用\1呼出you,
    最多保存9个,从左边开始标记
&    保存查找串,如s/My/you&you/,&表示My
\< 词首定位符,和^类似,如/\<My/
\> 词尾定位符,和$类似,如/My\>/
x\{m\} 连续m个x,如/a\{5\}/查找连续5个a
x\{m,\} 至少m个x,如/a\{5,\}/至少5个a
x\{m,n\} 至少m个x,最多n个x
\w   匹配每个字母和数字
\w\+  匹配每一个单词
\s  匹配每个空格
\x\+  x表示一个字符or一个单词,当匹配到一个或者多个时操作

原文地址:https://www.cnblogs.com/watertaro/p/9221007.html

时间: 2024-10-10 01:39:05

linux中sed命令的使用(绝对精华版)的相关文章

关于linux中sed命令的简单用法

linux中sed的学习和使用 今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的.sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器.即如下图: 我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容.但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了. 下面就一一介绍这个有趣的命令,莫急莫急一个一个来. 首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文

简述linux中sed命令

sed命令:Stream EDitor 流编辑器 sed命令的工作流程: sed会复制原文件中的一行或者多行,逐行进行操作.首先会将该行的内容放入到模式空间内,在模式空间内进行定界或者正则表达式匹配操作. a.如果该行内容不符合正则表达式或定界,该内容则被判断为No,进行标准输出. b.如果该行内容符合正则表达式或定界,该内容则被判断为Yes,进行编辑(包括标准输出). sed中模式空间和保持空间中的内容会进行会换,这种会换会使文件内容进行多次的筛选编辑,完成复杂的任务.   一般情况下,sed

linux中sed命令批量修改

sed命令下批量替换文件内容  格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名s表示替换,d表示删除 示例:sed -i "s/shan/hua/g"  lishan.txt 把当前目录下lishan.txt里的shan都替换为hua sed的其他用法如下: 1.删除行首空格   sed 's/^[ ]*//g' f

linux中awk的使用(绝对精华版)

在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要 下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件: 在awk中:()括号为条件块,{}为执行的命令块 print命令打印文件内容awk '{print}' datafile -f参数执行awk脚本,如脚本为hello.awkawk -f hello.awk datafile $number表示记录的字段,其中$0表示整个串 FS表示字段分隔符,如下以逗号作为分隔符awk 'BEGIN{FS=

linux中sed命令

sed基本用法: sed: Stream Editor  行编辑器,同vi编辑器不一样的是,vi编辑器是全屏编辑器. sed:模式空间 默认不编辑原文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印至屏幕: sed [options] 'AddressCommand' file... -n:静默模式,不在默认显示模式空间中的内容 -i:直接修改原始文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f  /PATH/TO/SED_SCRIPT sed -f /p

Linux中exec命令相关

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部 命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

Linux之sed命令常见用法

1. sed(stream editor),流编辑器 linux中,主要中sed命令实现对文件的增删改替换查 名称 sed - 用于过滤和转换文本的流编辑器 SYNOPSIS sed [选项]... {script-only-if-no-other-script} [文件]... 常用选项或命令 -i 正式执行操作修改内容 -n 取消默认输出 -e 允许多项编辑 -r 使用扩展正则表达式 = 在文件内容行前增加一行行号 s 查找并替换 g 全局范围 p 打印输出 '/ /p' 正则表达式匹配/

linux中find命令详解

http://blog.csdn.net/pipisorry/article/details/39831419 问题: linux中find命令查找时不包含某些目录 find 命令忽略某个或多个子目录的方法 在linux中用find 进行查找的时候,有时候需要忽略某些目录不查找,可以使用 -prune 参数来进行过滤,要忽略的路径参数必须紧跟着搜索的路径之后,否则该参数无法起作用. eg: [email protected]:/tmp1#find ./ -type f    #/tmp1目录下所

linux中ls命令详解

s 命令可以说是linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节点的修改时间,并以此排序.-d 将目录象文件一样显示,而不是显示其下的文件.-e 输出时间的全部信息,而不是输出简略信息.-f -U 对输出的文件不排序.-g 无用.-i 输出文件的 i 节点的索引信息.-k 以 k 字节的形式表示文件的大小.-l 列出文件的详细信息.-m 横向输出文件名