shell编程系列9--文本处理三剑客之sed概述及常见用法总结

sed的工作模式:对文本的行数据一行行处理,如下图
sed(stream editor),是流编辑器,依据特定的匹配模式,对文本逐行匹配,并对匹配行进行特定处理 语法格式 第一种形式:stdout | sed [option] "pattern command" 第二种形式:sed [option] "pattern command" file 命令格式:sed [option] "/pattern/command" file sed的处理过程 sed的选项 选项
-n 只打印模式匹配行
-e 直接在命令行进行sed编辑,默认选项
-f 编辑工作保存在文件中,指定文件执行
-r 支持扩展正则表达式
-i 直接修改文件内容

# 只打印数据
[root@es01 shell]# cat sed.txt
I love python
I love PYTHON
Hadoop is bigdata frame
[root@es01 shell]# sed 'p' sed.txt
I love python
I love python
I love PYTHON
I love PYTHON
Hadoop is bigdata frame
Hadoop is bigdata frame [root@es01 shell]# sed -n 'p' sed.txt
I love python
I love PYTHON
Hadoop is bigdata frame # -n 只显示处理的行,静默模式 [root@es01 shell]# sed '/python/p' sed.txt
I love python
I love python
I love PYTHON
Hadoop is bigdata frame
[root@es01 shell]# sed -n '/python/p' sed.txt
I love python
[root@es01 shell]# # 通过文件引入规则进行流处理
[root@es01 shell]# cat edit.sed
/python/p
[root@es01 shell]# sed -n -f edit.sed sed.txt
I love python # -r支持扩展正则表达式
[root@es01 shell]# sed -n -r '/python|PYTHON/p' sed.txt
I love python
I love PYTHON # 将love替换为like,源文件不修改
[root@es01 shell]# sed -n 's/love/like/g' sed.txt
[root@es01 shell]# sed -n 's/love/like/g;p' sed.txt
I like python
I like PYTHON
Hadoop is bigdata frame
[root@es01 shell]# cat sed.txt
I love python
I love PYTHON
Hadoop is bigdata frame # 将love替换为like,修改源文件
[root@es01 shell]# sed -i 's/love/like/g' sed.txt
[root@es01 shell]# cat sed.txt
I like python
I like PYTHON
Hadoop is bigdata frame sed中的pattern详解 pattern用法表

pattern用法:
、LineNumber 直接指定行号
sed -n "17p" file 打印file文件的第17行 、StartLine,EndLine 指定起始行号和结束行号
sed -n "10,20p" file 打印file文件的10到20行 、StartLine,+N 指定起始行号,然后后面N行
sed -n "10,+5p" file 打印file文件从第10行开始,往后面5行的所有行 、/pattern1/ 正则表达式匹配的行
sed -n "/^root/p" file 打印file文件中以root开头的行 、/pattern1/,/pattern2/ 从匹配到pattern1的行,到匹配到pattern2的行
sed -n "/^ftp/,/^mail/p" file 打印file文件中第一个匹配到以ftp开头的行,到第二个mail的行 [root@localhost ~]# sed -n "/^mail/,/^ftp/p" passwd
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin 、/LineNumber,/pattern1/ 从指定行号开始匹配,直到匹配到pattern1的
sed -n "4,/^hdfs/p" file 打印file文件中第4行开始匹配,直到以hdfs开头的行 、/pattern1/,LineNumber 从pattern1匹配的行开始,直到匹配到特定
sed -n "/root/,10p" file 打印file文件中匹配root的行,直到第10行结束 # 打印5行并往后+3行
[root@es01 shell]# sed -n '5,+3p' /etc/passwd
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt # 查找bash的行
[root@es01 shell]# sed -n '/bash/p' /etc/passwd
root:x:::root:/root:/bin/bash
ajie:x:::ajie:/home/ajie:/bin/bash
elasticsearch:x::::/home/elasticsearch:/bin/bash # 查找/sbin/nologin的行
[root@es01 shell]# sed -n '/\/sbin\/nologin/p' /etc/passwd
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
chrony:x::::/var/lib/chrony:/sbin/nologin
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin # 正则匹配
# 打印以root开头的行 [root@es01 shell]# sed -n "/^root/p" /etc/passwd
root:x:::root:/root:/bin/bash # 查找root开头的行到 sync 开头的行结束
[root@es01 shell]# sed -n '/^root/,/^sync/p' /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
[root@es01 shell]# # 查找root开头的行,到10行结束
[root@es01 shell]# sed -n '/root/,10p' /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin 编辑命令对照表-上

类别 编辑命令 含义
查询 p 打印
增加 a 往后追加
i 往前追加
r 外部文件读入,往后追加
w 匹配行写入外部文件 编辑命令对照表-下

删除 d 删除
修改 s/old/new 将行内第一个old替换为new
s/old/new/g 将行内全部的old替换为new
s/old/new/2g 将行内前2个old替换为new
s/old/newig 将行内old全部替换为new,忽略大小写 对文件的操作无非就是增加、删除、查询、修改 编辑命令用法总结:
查询: 、p 打印
删除:
、d 删除
增加:
、a 匹配到的行后追加内容
、i 匹配到的行前追加内容
、r 将后面指定文件的内容追加到匹配到的行后面
、w 将匹配到的行内容另存到其他文件中 修改:
、s/pattern/string/ 查找并替换,查找符合pattern模式的字符串,将其替换为string 适配(一、二、三、四、五)
s/pattern/string/g g表示表示全部匹配
s/pattern/string/2g 2g表示:同一行内,只替换前两个匹配到的,剩下的不替换
s/pattern/string/ig 加i参数表示匹配时忽略大小写,g表示匹配到的全部替换 其他编辑命令:
、= 显示行号 什么是反向引用?
&和\ 引用模式匹配到的整个串 sed "s/1..e/&r/g" file 在file中搜寻以1开头,然后跟两个任意字符,以e结尾的字符串 sed "s/\(1..e\)/\1r/g" file 和上面实现一样的功能,使用\1代表搜寻到的字符串 上面两种方式实现了一样的功能,分别使用&和\1引用前面匹配到的整个字符串 两者区别在于&只能表示匹配到的完整字符串,只能引用整个字符串:而\1可以使用()对匹配到的字符串进行二次操作 例如:如果我们仅想要替换匹配到的字符串的一部分,name必须使用\1这种方式,不能使用& sed中引用变量时注意事项:
、匹配模式中存在变量,则建议使用双引号
、sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量也必须使用单引号 [root@es01 shell]# cat -n passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
elasticsearch:x::::/home/elasticsearch:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin # 删除 passwd 文件的第一行
[root@es01 shell]# sed -i '1d' passwd
[root@es01 shell]# head passwd
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin # 删除 - 行
[root@es01 shell]# sed -i '1,3d' passwd
[root@es01 shell]# head passwd
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin # 删除不能登录的用户,即 /sbin/nologin
[root@es01 shell]# sed -i '/\/sbin\/nologin/d' passwd
[root@es01 shell]# cat passwd
root:x:::root:/root:/bin/bash
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
ajie:x:::ajie:/home/ajie:/bin/bash
elasticsearch:x::::/home/elasticsearch:/bin/bash # 删除以mail开头一直到以 ftp开头的行
[root@es01 shell]# sed -i '/^mail/,/^ftp/d' passwd # 在/bin/bash 行后面追加一句话 This is user which can login to system
[root@es01 shell]# sed -i '/\/bin\/bash/a This is user which can login to system' passwd
[root@es01 shell]# cat passwd
root:x:::root:/root:/bin/bash
This is user which can login to system
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
This is user which can login to system
chrony:x::::/var/lib/chrony:/sbin/nologin
elasticsearch:x::::/home/elasticsearch:/bin/bash
This is user which can login to system
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin # 行前追加 在 root 和 nginx之间所有行之前追加 AAAAAAAAAAAAAAAAAAAA
[root@es01 shell]# sed -i '/^root/,/^nginx/i AAAAAAAAAAAAAAAAAAAA' passwd
[root@es01 shell]# cat passwd
AAAAAAAAAAAAAAAAAAAA
root:x:::root:/root:/bin/bash
AAAAAAAAAAAAAAAAAAAA
This is user which can login to system
AAAAAAAAAAAAAAAAAAAA
bin:x:::bin:/bin:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
daemon:x:::daemon:/sbin:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
adm:x:::adm:/var/adm:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
lp:x:::lp:/var/spool/lpd:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
sync:x:::sync:/sbin:/bin/sync
AAAAAAAAAAAAAAAAAAAA
shutdown:x:::shutdown:/sbin:/sbin/shutdown
AAAAAAAAAAAAAAAAAAAA
halt:x:::halt:/sbin:/sbin/halt
AAAAAAAAAAAAAAAAAAAA
nobody:x:::Nobody:/:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
systemd-network:x:::systemd Network Management:/:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
dbus:x:::System message bus:/:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
polkitd:x:::User for polkitd:/:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
postfix:x::::/var/spool/postfix:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
ajie:x:::ajie:/home/ajie:/bin/bash
AAAAAAAAAAAAAAAAAAAA
This is user which can login to system
AAAAAAAAAAAAAAAAAAAA
chrony:x::::/var/lib/chrony:/sbin/nologin
AAAAAAAAAAAAAAAAAAAA
elasticsearch:x::::/home/elasticsearch:/bin/bash
AAAAAAAAAAAAAAAAAAAA
This is user which can login to system
AAAAAAAAAAAAAAAAAAAA
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin # 查找文件中有root的行,读取 list 的内容追加进去
[root@es01 shell]# sed -i '/root/r list' passwd
[root@es01 shell]# cat passwd
root:x:::root:/root:/bin/bash
First Line(XXXXXXXXXXXXXXXX)
Second Line(XXXXXXXXXXXXXX)
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
First Line(XXXXXXXXXXXXXXXX)
Second Line(XXXXXXXXXXXXXX)
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
elasticsearch:x::::/home/elasticsearch:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin # 将匹配到的 /bin/bash 行写入到 /tmp/user_login.txt 文件中
[root@es01 shell]# sed '/\/bin\/bash/w /tmp/user_login.txt' passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
elasticsearch:x::::/home/elasticsearch:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:::MariaDB Server:/var/lib/mysql:/sbin/nologin
[root@es01 shell]# cat /tmp/user_login.txt
root:x:::root:/root:/bin/bash
ajie:x:::ajie:/home/ajie:/bin/bash
elasticsearch:x::::/home/elasticsearch:/bin/bash sed 中的修改操作
.匹配修改 s/pattern/string
s/pattern/string/g
s/pattern/string/2g
s/pattern/string/ig # passwd小写 /bin/bash 全部替换为/BIN/BASH [root@localhost shell]# cp /etc/passwd ./
[root@localhost shell]# sed -i 's/\/bin\/bash/\/BIN\/BASH/g' passwd
[root@localhost shell]#
[root@localhost shell]# cat passwd
root:x:::root:/root:/BIN/BASH
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/BIN/BASH
chrony:x::::/var/lib/chrony:/sbin/nologin
deploy:x::::/home/deploy:/BIN/BASH
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin # 只替换第一个root为ROOT
[root@localhost shell]# sed -i 's/root/ROOT/' passwd
[root@localhost shell]#
[root@localhost shell]# more passwd
ROOT:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/ROOT:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
deploy:x::::/home/deploy:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin # 只替换 一行的第二个
[root@localhost shell]# sed -i 's/HADOOP/hadoop/2' str.txt
[root@localhost shell]# cat str.txt
HADOOP is a bigdata frame hadoop HADOOP
Spark HADOOP Kafka
Skill on HADOOP
Paper OF HADOOP
Google HADOOP # 从一行的第二个符号条件的字符开始替换
[root@localhost shell]# sed -i 's/HADOOP/hadoop/2g' str.txt
[root@localhost shell]# cat str.txt
HADOOP is a bigdata frame hadoop
Spark HADOOP Kafka
Skill on HADOOP
Paper OF HADOOP
Google HADOOP # 显示符合内容的行号,显示包含/sbin/nologin的行号
[root@localhost shell]# sed -n '/\/sbin\/nologin/=' passwd [root@localhost shell]# cat passwd
ROOT:x:::root:/ROOT:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/ROOT:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
deploy:x::::/home/deploy:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin 反向引用:
[root@localhost shell]# cat str.txt
hadAAps is a bigdata frame
Spark hadBBp Kafka
Skill on hadCCp
Paper OF hadDDp
Google hadEEp # 将hadXXp替换为hadoops
[root@localhost shell]# sed -i 's/had..p/hadoops/g' str.txt
[root@localhost shell]# cat str.txt
hadoops is a bigdata frame
Spark hadoops Kafka
Skill on hadoops
Paper OF hadoops
Google hadoops #
[root@localhost shell]# cat str.txt
hadAAps is a bigdata frame
Spark hadBBp Kafka
Skill on hadCCp
Paper OF hadDDp
Google hadEEp
# 不改变原来结构的情况下加s
# & 表示匹配前面查找到的内容
[root@localhost shell]# sed -i 's/had..p/&s/g' str.txt
[root@localhost shell]# cat str.txt
hadAApss is a bigdata frame
Spark hadBBps Kafka
Skill on hadCCps
Paper OF hadDDps
Google hadEEps # \ 也可以表示前面匹配到的内容
[root@localhost shell]# sed -i 's/\(had..ps\)/\1R/g' str.txt
[root@localhost shell]# cat str.txt
hadAApsR is a bigdata frame
Spark hadBBpsR Kafka
Skill on hadCCp
Paper OF hadDDpsR
Google hadEEpsR # 定义变量的时候如果使用单引号 ' 不会进行替换,注意需要使用双引号"$var"
[root@localhost shell]# cat str.txt
hadoop is a bigdata frame
Spark hadoop Kafka
Skill on hadoop
Paper OF hadoop
Google hadoop
[root@localhost shell]# cat examp.sh
#!/bin/bash
# old_str=hadoop
new_str=HADOOP sed -i 's/$old_str/$new_str/g' str.txt
[root@localhost shell]# sh examp.sh
[root@localhost shell]# cat str.txt
hadoop is a bigdata frame
Spark hadoop Kafka
Skill on hadoop
Paper OF hadoop
Google hadoop

shell编程系列9--文本处理三剑客之sed概述及常见用法总结的更多相关文章

  1. shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容

    shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...

  2. shell编程系列12--文本处理三剑客之sed利用sed修改文件内容

    shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...

  3. shell编程系列10--文本处理三剑客之sed利用sed查询特定内容

    shell编程系列10--文本处理三剑客之sed利用sed查询特定内容 利用sed查找文件内容: pattern种类: .8p .,10p .,+5p ./regexp/p .,/regexp/p . ...

  4. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  5. shell编程系列13--文本处理三剑客之sed利用sed追加文件内容

    shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...

  6. shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句

    shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句条件语句 if(条件表达式) 动作1 else if(条件表达式) 动作2 else 动 ...

  7. shell编程系列14--文本处理三剑客之awk的概述及常用方法总结

    shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ...

  8. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  9. shell编程系列19--文本处理三剑客之awk中的字符串函数

    shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...

随机推荐

  1. Vue中mapMutations映射方法的问题

    今天又被自己给蠢到,找了半天没发现问题.大家看下代码. mutation-types.js 里我新增了一个类型.INIT_CURRENTORDER export const GET_USERINFO ...

  2. js数组的操作大全

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  3. python的种类有哪些?

    CPython 当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython.这个解释器是用C语言开发的,所以叫CPython.在命令行下运行p ...

  4. 洛谷 P1082 同余方程 题解

    每日一题 day31 打卡 Analysis 题目问的是满足 ax mod b = 1 的最小正整数 x.(a,b是正整数) 但是不能暴力枚举 x,会超时. 把问题转化一下.观察 ax mod b = ...

  5. CDH 大数据平台搭建

    一.概述 Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”),基于Web的用户界面,支持大多数Hadoop组件,包括 ...

  6. 一.使用LDAP认证

    作用:网络用户认证,用户集中管理 网络用户信息:LDAP服务器提供 本地用户信息:/etc/passwd /etc/shadow提供     LDAP服务器:虚拟机classroom     LDAP ...

  7. SaltStack 在 Windows 上的操作基础

    SaltStack 在 windows上的操作基础 1.删除文件: salt '172.16.3.11' file.remove 'D:\downup\111.msu' 2.删除文件夹 salt '1 ...

  8. 基于verilog的分频器设计(奇偶分频原理及其电路实现:上)

    在一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率太高)进行分频.分频器主要分为奇数分频,偶数分频,半整数分频和小数分频,在对时钟要求不是很严格的FPGA系统中 ...

  9. codevs1580单词游戏

    题目描述中说: 单词为at,k=8则新单词为ib 推移规则是:如果k为正数则下推,否则上推,当推移超越边界时回到另一端继续推移. 但在我做题时发现: 这个描述与数据所要求的是完全相反的!!!! 样例1 ...

  10. centos host-only网卡配置

    1.更改网卡配置 更改虚拟机/etc/sysconfig/network-scripts/ifcfg-enp0s3 文件,内容如下: TYPE=Ethernet PROXY_METHOD=none B ...