sed:字符流编辑器
简介sed是Stream Editor的缩写,简称流编辑器。sed是操作、过滤和转换文本内容的强大工具。常用的功能包括对文件实现快速的增删改查,其中查询的功能最常用是过滤和取行。
说明
sed是Stream Editor的缩写,简称流编辑器。sed是操作、过滤和转换文本内容的强大工具。常用的功能包括对文件实现快速的增删改查,其中查询的功能最常用是过滤和取行。
格式
sed [option] [sed内置命令字符] [file]
常用命令
- -n:取消默认的sed输出,常与sed内置命令的p连用
- -i:直接修改文件内容,而不是输出到终端。如果不使用-i选项,则sed只修改内存中的数据,并不会修改磁盘文件的数据
sed内置命令
- a:append,表示追加文本,去指定的行后面添加一行或多上文本
- d:delete,表示删除匹配行的文本
- i:insert,表示插入文本,在指定行前添加一行货多行文本
- p:print,表示打印匹配行的内容
- s/regexp/replacement/:匹配regexp部分的内容,用replacement替换regexp匹配的内容,regexp部分可以使用正则表达式,在replacement部分可以使用特殊字符&或\1-\9等匹配regexp部分的部分内容。在实时中,s/regexp/replacement/g结尾常与g匹配做全局的替换
示例
准备文件内容
[root@localhost ~]# cat > test2.txt <<EOF
> 1001,python
> 1002,php
> 1003,java
> 1004,golang
> 1005,mysql
> 1006,javascript
> EOF
[root@localhost ~]# cat test2.txt
1001,python
1002,php
1003,java
1004,golang
1005,mysql
1006,javascript
1、在文件指定行后追加文本
[root@localhost ~]# sed "2a 1007,C++" test2.txt
1001,python
1002,php
1007,C++
1003,java
1004,golang
1005,mysql
1006,javascript
sed后面引号里面的内容解析:
- 2:表示对第2行进行操作,其他的行忽略
- a:表示追加,2a表示第2行后面追加文本
- 2a后面一定要加上空格,然后接着输入想要追加的文本内容
2、在文件指定的行前插入文本
[root@localhost ~]# sed "2i 1008,C" test2.txt #2i表示在第二行之前插入文本
1001,python
1008,C
1002,php
1003,java
1004,golang
1005,mysql
1006,javascript
3、在文件指定的行后追加多行文本
[root@localhost ~]# sed "2a 1007,C++\n1008,nodejs" test2.txt #使用\n进行内容换行就可以了
1001,python
1002,php
1007,C++
1008,nodejs
1003,java
1004,golang
1005,mysql
1006,javascript
4、删除文件指定行的内容
[root@localhost ~]# sed "2d" test2.txt #只删除第二行
1001,python
1003,java
1004,golang
1005,mysql
1006,javascript
[root@localhost ~]# sed "2,5d" test2.txt #删除2到5行
1001,python
1006,javascript
5、替换文本内容,使用#和/都可以
[root@localhost ~]# sed "s#a#__#g" test2.txt
1001,python
1002,php
1003,j__v__
1004,gol__ng
1005,mysql
1006,j__v__script
[root@localhost ~]# sed "s/a/__/g" test2.txt
1001,python
1002,php
1003,j__v__
1004,gol__ng
1005,mysql
1006,j__v__script
6、打印输出文件的指定行的内容
[root@localhost ~]# sed '2p' test2.txt
1001,python #默认输出的行
1002,php #p命令输出的行
1002,php #默认输出的行
1003,java #默认输出的行
1004,golang #默认输出的行
1005,mysql #默认输出的行
1006,javascript #默认输出的行
#输出了第二行的内容,但是不只是输出第二行的内容,还输出了其他的内容,这是因为sed命令有一个默认的输出功能,如果要过滤掉多余的内容,就需要使用-n参数取消默认的输出。
[root@localhost ~]# sed -n '2p' test2.txt
1002,php
[root@localhost ~]# sed -n '2,3p' test2.txt
1002,php
1003,java
上面的增删改命令执行后,其实文本的内容都没有发生变化,是因为我们修改的只是内存中的数据,如果需要修改后保存到文件中,就需要使用-i命令
7、将修改后的内容保存到文件中
[root@localhost ~]# sed -i "s/a/__/g" test2.txt #加了-i后就不会直接输出,而是保存到文件
[root@localhost ~]# cat test2.txt
1001,python
1002,php
1003,j__v__
1004,gol__ng
1005,mysql
1006,j__v__script
8、替换例子
[root@localhost ~]# cat test3.txt #奇数行为用户,偶数行尾对应的密码
user1
passwd1
user2
passwd2
user3
passwd3
[root@localhost ~]# sed "N;s/\n/=/g" test3.txt #将用户和密码对应起来
user1=passwd1
user2=passwd2
user3=passwd3
sed内置命令N的作用:不会清空模式空间的内容,并且从输入文件中读取下一行的数据,追加到模式空间中,两行数据以\n连接。
第一行为user1存入模式空间,当有N命令是,读取第二行的内容passwd1,此时模式空间的内容为user1\npasswd1,然后执行s#\n#=#g将\n替换成=。
快速生成表格
如果在使用Gin框架编写web应用程序中,如果里面包含了模板文件和静态文件,我们如何进行打包呢?本文主要记录该操作。
图标组件是展示图标的组件,但是再Flutter中,Icon组件是只是起一个展示效果,不能进行交互,如果要实现交互,就需要使用图标按钮IconButton组件。
《康熙王朝》是一部非常优秀的电视连续剧,陈道明演的康熙是我觉得最有帝王气魄,让人意犹未尽,本文主要记录一小段非常经典的对白。
《是妈妈是女儿》聚焦母女间未曾言明的爱意,以书信对话的形式呈现出各自的内心独白,表达彼此的牵挂。黄绮珊与希林娜依·高用跨越时空、打开心扉、深情对唱的形式,将天下母女爱的寄语化作心灵的倾诉。黄绮珊的每一句话,每一个字都演绎出了妈妈对女儿的爱,而希林依娜·高把女儿对妈妈的爱由不理解到理解再到感恩演绎得淋漓尽致。
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。