linux shell 编辑文件内容,Shell编辑与文本处理(Bash sed文本编辑)
释放双眼,带上耳机,听听看~!
1 sed 命令格式
sed 的全称是 stream editor,也就是流编辑器。其作用便是将文本文件或来自于管道符传入的输入流做文本的处理,如替换、增加内容、删除内容等等。
sed 命令基本格式:
sed [参数]… [执行命令] [输入文件]…
常用的参数:
执行命令的格式:
[n1][,n2]command
[n1][~step]command
其中 n1,n2 表示输入内容的行号,它们之间为 ,,如果为~波浪号则表示从 n1 开始以 step 为步进的所有行;command为执行动作,下面为一些常用动作指令:
2 sed 使用实例
1. 删除字符串
这里仍然使用上一节写的 txt 测试文档来演示,内容如下,可以使用实验桌面右边工具栏的剪切板拷贝到实验环境中:
$ vim blankspace.txt
为了让效果明显地看到,我们使用 nl 命令将 blankspace.txt 的内容与打印行号同时打印出来,同时利用 sed 将 2-5 行删除显示:
$ nl blankspace.txt | sed ‘2,5d’
命令解释:’2,5d’ 表示 2~5 行,d 表示删除。
删除第13行到最后一行, $ 定位到最后一行:
$ nl blankspace.txt | sed ’13,$d’
当然之前的操作都没有加 -i 参数,所以只是展示了效果但是没有修改原文,若是要在原文件中删除第 15 行:
$ sed -i ’15d’ blankspace.txt
2. 添加字符串
在第二行后添加 test 字符串,a表示在行后添加一行加上字符串,i 表示在行前加一行添加字符串
例如:
$ nl blankspace.txt | sed ‘2a test’
在第二行前添加一行插入 test 字符串:
$ nl blankspace.txt | sed ‘2i test’
3. 替换字符串
将 2-5 行内容取代为 blankspace
c 为替换内容选项。
$ nl blankspace.txt | sed ‘2,5c blankspace’
4. 列出匹配字符
列出 blankspace.txt 内第 5-7 行
sed 命令中 -n 为安静模式选项。以下两条命令执行结束后可对比结果。 $ nl blankspace.txt |sed -n ‘5,7p’
$ nl blankspace.txt |sed ‘5,7p’
3 多重命令
如果我们需要同时执行多个操作,就要利用 sed 的多重命令特性了。
顾名思义,多重命令就是多个命令,它有如下几种使用方式。
我们先来新建一个实验文本 words,在里面输入如下内容,可以使用实验操作界面右边的工具栏中的剪切板将下面的文本内容贴入到实验环境中
$ vi words
syl
I hate wanneng
3.1 使用分号分隔命令
我们想把文本的 syl 修改成 wanneng,同时把 hate 修改成 love ,可以使用分号分隔命令:
如上所示,我们使用分号对命令进行了分隔。
3.2 使用 -e 参数
在 sed 命令中,还可以使用 -e 参数来执行多个命令:
$ sed -e ‘s/syl/wanneng/’ -e ‘s/hate/love/’ words
如上所示,多次使用 -e 参数我们可以引用多个执行命令,从而达到我们的目的
3.3. 分行
除了使用分号,以及 -e 参数之外,还可以通过分行来编写多个命令,达到多重命令的效果,如下所示:
$ sed ‘ #按enter键
quote> s/syl/wanneng/
quote> s/hate/love/’ words
4. 脚本文件
在命令行输入较长的命令是不切实际的,我们可以通过在脚本文件中写入多个 sed 命令。最后再使用 sed 的 -f 参数去执行脚本文件中的命令,对目标文件进行处理。这其实也属于多重命令的一种应用方式。
4.1 语法
$ sed -f
scriptfile :脚本文件的名称。
file :待处理文件的名称。
4.2 应用
与在 多重命令 中的示例类似,可以通过编写脚本文件来达到同样的效果。
如下所示的 sed-script 脚本文件中的内容:
s/syl/wanneng/
s/hate/love/
使用 sed 命令的 -f 参数执行,结果如下。
sed -f sed-script words
除此之外,还可以像写 bash 脚本的格式去书写 sed 脚本,这时不需要使用 sed 命令,直接赋予脚本权限,执行脚本即可。
例如如下所示的 replace.sed 脚本文件的内容:
#!/bin/sed -f
s/syl/wanneng/
s/hate/love/
然后通过 chmod 命令为其添加权限后,运行结果如下图所示:
5. 寻址
sed 修改文件,有时候我们并不会对全文的内容进行操作,只对符合条件的行或者内容进行操作,这时候我们就会用到寻址了。而这里所谓的条件有两种:
指定的某一行
利用正则表达式,符合规则的内容
5.1 使用寻址
对于修改文件的内容,可以只对符合条件的行或者内容进行操作,也可以针对全文,大致的分类如下:
没有指定地址:应用于每一行
只有一个地址:应用于这个地址匹配的任意行
由逗号分隔的两个地址:应用于两个匹配地址之间的所有行
地址后跟感叹号:应用于不匹配该地址的所有的行
我们将在以下应用实例中逐一展示:
新建文件 xunzhi ,输入如下内容:
把文件中的 b 字符替换成 new,使用如下操作:
$ nl xunzhi | sed ‘s/b/new/’
在下面的运行截图中可以看到所有的 b 都被替换成 new,这就是没有指定地址的方式。 如果我们想要将字符 a 所在行的字符 b 替换为 new,就需要使用寻址:
$ nl xunzhi | sed ‘/a/s/b/new/’
若是我们想删除最后一行,可执行如下操作:
$ nl xunzhi | sed ‘$d’
注意:d 是 sed 中的删除命令
利用正则表达式删除空行:
$ cat xunzhi | sed ‘/^$/d’
指定某个范围内的行,例如删除从第3行到最后一行的所有行:
$ nl xunzhi | sed ‘3,$d’
当然指定区间范围时,具体行数于正则也可以混合使用,例如删除第一行直到第一个空行的所有行:
$ cat xunzhi | sed ‘1,/^$/d’
5.2 分组命令
在上面的操作中,我们只是对字符 a 所在的行执行一个操作,当我们想对 a 所在的行执行多个操作的时候就需要使用到分组命令。
sed 使用大括号 {} 将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令。我们可以根据如下实践来更好的理解。
修改我们的 xunzhi 文件内容,如下所示:
a b hello world
b world
c b d hello world
d b world good
e hello
f
我们要把包含字符 b 又包含 hello 的行中的 world 改成 shiyanlou,再把第 5 行的 world 替换成 louplus。该怎么做呢?
我们发现第 5 行包含 b 和 d。我们把 b 作为一个共同的地址。找到有 b 的行,在有 b 的行中找到有 hello 的行,然后替换 world 为 shiyanlou,再在有 b 的行中找到有 d 的行,然后替换包含 world 的为 louplus。注意这个顺序,这里有两行都同时包含 b, d, world 三个字符串,如果先去替换成 louplus 的话,那么第三行的 world 也会被替换成 louplus,而后执行替换成 shiyanlou 的时候,第三行就没有 world 那个字符串了。
新建一个文件 fenzu,输入如下内容
# this is fenzu
/b/{
/hello/s/world/waneneng/
/d /s/world/louplus/
}
文件中的注释可以使用 # 开头,这里第一行就是注释。可以不写。 注意大括号后面不能有空格,并且右括号要单独在一行。 注意 d 后面有空格,如果没有空格的话,所有含有 b 字符的行的字符 world 都会被替换成 louplus。因为 sed 会把 d 认成一个特殊字符。采用转义符去转义 d 是不行的。
运行命令:$ sed -f fenzu xunzhi
linux shell 编辑文件内容,Shell编辑与文本处理(Bash sed文本编辑)相关推荐
- linux vim无法编辑文件内容,Linux 使用vim命令编辑文件内容
在终端可以使用vim命令来直接编辑文件内容. vim,也可以叫做vi. vim有三种模式:命令模式.输入模式.底线命令模式. 命令模式 vim 文件名 进入命令模式,vim也可以写成vi. 如果 ...
- linux如何改文件内容,linux下用命令修改文件内容
linux下vi命令修改文件及保存的使用方法 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi n filename :打开文件,并将光标置于第n行首 vi fil ...
- linux命令看文件内容,Linux文件内容查看相关命令
1.more命令 在Linux中,more命令是一个基于vi编辑器的文本过滤器,它能以全屏的方式按页显示文本文件的内容,more里面内置了一些快捷键. (1)命令语法 more(选项)(参数) (2) ...
- linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...
- java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
[Java教程][Linux]linux查看日志文件内容命令tail.cat.tac.head.echo 0 2017-11-14 12:00:29 linux查看日志文件内容命令tail.cat.t ...
- linux view查看日志命令,【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...
- linux查看日志文件内容命令tail、cat、tac、head、echo、vi
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...
- linux中搜索文件内容关键字--转载哈
linux中搜索文件内容关键字 度娘了下,想找的答案就是这个,发现一堆xxxx的回答,在此记录下,方便以后查阅.谢谢 linux系统里的VI是编辑文本的命令,在vi里查找相应关键字的方法为: /关键字 ...
- Linux常用查看文件内容命令
Linux下查看文件内容的命令 cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的显示文件内容 less 和more类 ...
最新文章
- 为什么 JSP 还没有被淘汰?
- Android开发举步维艰,上弘法寺七七四十九天取得“真经”!
- Maven命令行使用:mvn clean install(安装)
- CSS的未来:游戏的变革Flexbox
- 为了追到小姐姐,我用 Python 制作了一个机器人
- 项目托管 网站 小记
- Gitlab Merge Request Builder Plugin 配置小记
- 虚拟机python环境搭载_windows之自动化在虚拟机部署操作系统并自带python环境
- 【STM32】关闭JTAG接口,引脚设置推挽输出
- http地址后面加上问号?防止IE缓存
- java怎么看内存值_【java】内存分析
- js里apply用法
- CSDN新版下载频道改版上线了
- win10cmd重置系统_win10怎么重置电脑 win10重置此电脑的方法【图文】
- win7变成xp风格了怎么改回_win7桌面怎么改成xp风格
- 2022南京商业贷款提前还款
- 强化学习-学习笔记11 | 解决高估问题
- 鼠标上下滑轮时,来回乱跑的骚操作
- 令我难忘的DB2数据库之路
- linux 解压命令不提示信息,技术编辑研习linux解压命令【解决措施】