Linux中sed命令使用大全
Linux中sed命令使用大全
sed编辑器是一种流式编辑器,与常见的交互式文本编辑器相反,交互式文本编辑器比如vim,可以通过键盘来交互式插入,删除文本,替换文本,流试编辑器会在编辑器处理数据之前预先提供一组规则编辑数据流。废话少说,直接看用法。
需要强调的是,sed命令不会改变源文件的内容
1.1 sed命令格式
sed options script file
其中options有:
-e script 处理输入时,将script中指定命令添加到已经有的命令中
-f file 在处理时,将file中指定命令添加到已有的命令中
-n 不产生输出,使用print命令完成输出
sed的替换命令
echo "This is a test " | sed ‘s/test/big test/’
[Click and drag to move]
上述命令输出的结果是:
This is a big test
解释:sed 使用s命令表示替换,会将斜线间指定的第二个字符串代替第一个字符串,本例子中的使用big test 替换 test
千万要注意,使用单引号将s命令中的替换包括起来,不是双引号。
如果时替换文件中的也是一样:
sed ‘s/dog/cat/’ example.txt
[Click and drag to move]
上述命令会将example.txt中的dog替换成cat
同时使用多个命令
使用多个命令,使用-e选项就可以。
echo xx yy zz | sed -e ‘s/xx/yy/; s/zz/yy/’
[Click and drag to move]
上述结果就是yy yy yy,如果是对文件也是一样的,后面接文件名。此处时为了好演示,所以使用echo
上述需要注意的点:
1 命令之间是用;分割开来
2 多个命令是包含在一对单引号之间,不是多组
3 每个s命令要完整也就是反斜杠必须是三个,不能少,尤其最后6一个容易被忽视,不能少,不然报错
从文件中读取命令
例如有如下文件test.sed,内容如下:
s/dog/cat/
s/apple/cat/
[Click and drag to move]
使用命令如下:
echo dog cat apple | sed -f test.sed
[Click and drag to move]
得到的结果就是:
cat cat cat
sed使用-f选项来从文件中读取命令指定文件
需要注意的点:
1 文件中的多个命令不是使用;分割,而是每一行就是一个命令
2 不需要使用单引号包括起来
3 这个文件不是bash类的脚本,不需要使用!#/bin/bash 这种头文件
替换所有的
需要注意的是,默认情况下sed只是替每一行中出现的第一处,也就是说一行中有多个需要替换的,sed默认只是替换其中的第一个,如果想替换所有的,怎么弄呢?
必须要加替换标记
s/pattern/replacement/flags
[Click and drag to move]
其中替换标记有四种,
- 1 数字,表示新文本将替换第一处模式匹配的地方
echo “xx,xx,xx” | sed ‘s/xx/yy/3’
[Click and drag to move]
结果就是:xx,xx,yy
- 2 :g ,表示替换所有匹配到的字符串
echo “xx,xx,xx” | sed ‘s/xx/yy/g’
[Click and drag to move]
结果就是:yy,yy,yy
- 3: p 表明原先行的内容也打印出来
echo "xx,xx,xx" | sed 's/xx/yy/p'
结果是:
yy,xx,xx
yy,xx,xx
比之前显示多了一行,常常和-n一起使用,只输出被命令替换过的行。
echo -e "xx,xx,xx \\n zz,uu,dd\\n" | sed -n 's/xx/yy/p'
结果是:
yy,xx,xx
只是显示了被替换的行
- 4 w file 将替换结果写入文件
echo -e "xx,xx,xx \\n zz,uu,dd\\n" | sed -n 's/xx/yy/w' xxx.txt
替换特殊字符(/)
在替换文本中的“/”时候比较困难,这种符号常出现在路径中,如果一定要按照原来的方法做,那必须转义,
echo "/home/user/shell/" | sed 's/\/home/\/usr/'
这种虽然也可以,但是太复杂的,有简单的方法,那就是,使用其他的字符代替,使用其他字符代替分隔符,例如感叹号!
echo "/home/user/shell/" | sed 's/\/home/\/usr/'
分隔符前后两个之间的表示一个字符,用感叹号分割,比较直观。
sed 只作用于某些特定行
默认sed会作用于所有的行,如果只是想作用某特定行,那么需要添加寻行址
sed编辑器中有两种寻行址。
- 1 以数字形式表示行区间
- 2 用文本模式过滤
使用数字方式寻地址
echo -e "xx,xx,xx \\nxx,xx,xx\\nxx,xx,xx" | sed '1s/xx/yy/'
其中1s表示只替换第一行
echo -e "xx,xx,xx \\nxx,xx,xx\\nxx,xx,xx" | sed '1,3s/xx/yy/
替换1-3行是一个闭区间,这种是区间的写法
用文本模式过滤
使用正则表达试
删除命令
删除行使用d,删除特定行
echo -e "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '1d'
结果为:
yy,yy,yy
zz,zz,zz
删除第一行
删除区间行:
echo -e "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '1,2d'
结果为:
zz,zz,zz
删除从第n行到文件结尾
echo -e "xx,xx,xx \\nyy,yy,yy\\nzz,zz,zz" | sed '2,$d'
结果为:
xx,xx,xx
插入与附加文本
插入使用 i (inset)
附加用 a (append)
插入文本
echo "xx yy zz" | sed 'i\aa bb cc'
结果为
aa bb cc
xx yy zz
需要注意,
1 i后面接的是反斜线,不是正斜线,如果写成正斜线,那么正斜线也会被当作字符输出。
2 使用插入字符串,结果是插入在文本前面
使用添加文本
echo "xx yy zz" | sed 'a\aa bb cc'
xx yy zz
aa bb cc
可以看到,使用添加文本,添加的字符串出现在文本的后面,与插入不同
插入添加到指定行
echo -e "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2a\aa bb cc'
xx yy zz
qq ww ee
aa bb cc
rr tt yy
yy uu ii
这里2a表示添加到第二行的后面,如果是添加到第二行的前面,使用2i。
echo -e "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2i\aa bb cc'
xx yy zz
aa bb cc
qq ww ee
rr tt yy
yy uu ii
插入出现在前面,添加出现在后面,指定行加上行号。插入行尾,可以使用$美元符号来表示,而不需要数到最后一行。
echo -e "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '$a\aa bb cc'
xx yy zz
qq ww ee
rr tt yy
yy uu ii
aa bb cc
修改行
修改行使用命令c(change),与插入添加命令使用方式一样,需要指定修改的行。
echo -e "xx yy zz \nqq ww ee \nrr tt yy \nyy uu ii" | sed '2c\aa bb cc'
xx yy zz
aa bb cc
rr tt yy
yy uu ii
上述的例子为修改第二行。
转换命令
转换命令y(transform),是唯一一个可以处理单个字符sed编辑命令。
y/inchars/outchars
上述是转换命令的格式。
echo -e "abc" | sed 'y/abc/123/'
123
上述例子可以看出,转换命令中的字符是一一对应的,也可以指定行转换
echo -e "abc\nbac\ncba" | sed '1y/abc/123/'
123
bac
cba
打印
- p命令用来文本行
- 等号用来打印行号
- l(小写L)用来列出行
打印行
echo -e "abc" | sed 'p'
abc
abc
p命令打印sed中输出行,所以上述为两行。单独使用这个命令没啥意义。常和其他命令结合。
常和只显示模式匹配的行一起使用
echo -e "abc\nbac\ncba" | sed -n '/abc/p'
abc
-n命令禁止其他输出,刚好和p命令友好结合,只输出匹配到的行。
打印行号
echo -e "abc\nbac\ncba" | sed '='
1
abc
2
bac
3
cba
这样行号出现在行的前面。
列出行
列出(list)命令,可以打印数据流中的文本和不可打印的ACII字符,任何不可打印的支字符要么在其八进制前加一个反斜线,要么使用标准C风格的命名法,例如:
echo -e "abc\nbac\ncba" | sed 'l'
abc$
abc
bac$
bac
cba$
cba
他把换行符号也打印出来了。
使用sed处理文件
写入文件用w命令
echo -e "abc\nbac\ncba" | sed 'w xxx.txt'
abc
bac
cba
数据就写入了xxx.txt文件。如果是指定行写入,加入一个行号就可以。
echo -e "abc\nbac\ncba" | sed '1w xxx.txt'
abc
bac
cba
只将第一行写入文件
echo -e "abc\nbac\ncba" | sed '1,3w xxx.txt'
abc
bac
cba
将1-3行写入文件,
从文件读取数据
使用r命令(read)
sed '1r xxx.txt' yyy.txt
wer
abc
bac
cba
zxcv
rfhebtyre
上述命令将xxx.txt中的文本插入到yyy.txt的第一行后面。
这些命令可以相互结合使用。
好了,sed命令讲解就到这里。
Linux中sed命令使用大全相关推荐
- linux中往sed命令,Linux中Sed命令怎么用?
Linux中Sed命令怎么用? 发布时间:2020-05-26 17:14:39 来源:亿速云 阅读:245 作者:鸽子 Sed介绍:sed是文本处理工具,读取文本内容,根据指定的条件进行处理如删除. ...
- 批量修改linux换行格式,linux中sed命令批量修改
sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...
- linux中替换命令详解,linux中sed命令字符串替换的用法详解
Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助! linux中sed命令字符串替换的用法详 ...
- linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件
一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...
- linux中sed命令用例,sed解析和用例(马哥视频笔记)
sed(流编辑器) sed基本用法: sed:Stream EDitor 行编辑器(另一种:全屏编辑器:vi.vim) sed:模式空间 sed默认部编辑源文件,仅对模式空间中的数据做处理:而后将模式 ...
- 面试linux中sed的用法,linux中sed命令的使用与注意小结
前言 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用s ...
- linux sed命令新文件名,linux中sed命令批量修改
sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...
- linux 脚本追加最后命令,linux中sed命令批量修改
sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...
- linux中whoami命令的作用是,浅谈linux中的whoami与 who指令
浅谈linux中的whoami与 who指令 whoami 功能说明: 显示用户名称 语法: whoami 补充说明: 显示自身的用户名称,本指令相当于执行 id -un 指令 whoami 与 w ...
最新文章
- cnn 反向传播推导_反向传播算法推导过程(非常详细)
- 产品经理的知识结构是什么
- 异步任务AsyncTask
- Javascript - Vue - webpack
- asp.net 二级域名(路由方式实现)
- LeetCode Algorithm 217. 存在重复元素
- 网络上经典的DOS小命令
- lda主题词评论python_Python之酒店评论主题提取LDA主题模型
- hhkb mac设置_我最爱的HHKB
- N个例子让你彻底理解java接口回调
- 极大似然估计与贝叶斯估计
- 微信小程序的转发分享功能
- 面试时你需要问HR什么问题?
- ASP.NET Web Forms 自学篇:(一)简介
- Shell If Else语句 数学运算 与 逻辑运算
- 【ICPC-457】数学笔记
- 徒手撸了一个 API 网关,理解更透彻了,代码已上传github,自取~
- 什么是REST ful?
- U盘中病毒,文件消失,但U盘的大小却没有改变
- 智能发展的四个层次:运算智能,感知智能,认知智能,强智能。道翰天琼认知智能。