sed 编辑器
sed 说明
sed 是 Linux 下一款功能强大的非交互流式文本编辑器, 可以对文本文件进行增, 删, 改, 查等操作, 支持按行, 按字段, 按正则匹配文本内容, 灵活方便, 特别适合于大文件的编辑.
sed 使用方法
sed 的使用方法, 调用 sed 命令的语法有两种:
一. 在命令行指定 sed 指令对文本进行处理: sed + 选项 '指令' 文件
二. 先将 sed 指令保存到文件中, 将该文件作为参数进行调用: sed + 选项 -f 包含 sed 指令的文件 文件
sed 的常用选项
-e: 它告诉 sed 将下一个参数解释为一个 sed 指令, 只有当命令行上给出多个 sed 指令时才需要使用 - e 选项
-f: 后跟保存了 sed 指令的文件
-i: 直接对内容进行修改, 不加 - i 时默认只是预览, 不会对文件做实际修改
-n: 取消默认输出, sed 默认会输出所有文本内容, 使用 - n 参数后只显示处理过的行
sed 中的编辑命令
a: 追加 向匹配行后面插入内容
c: 更改 更改匹配行的内容
i: 插入 向匹配行前插入内容
d: 删除 删除匹配的内容
s: 替换 用斜线间指定的第二个文本字符串来替代第一个文本字符串.
- [root@node3 ljy]# more ceshi.sh
- this is one!
- [root@node3 ljy]# sed -i 's/one/two/' ceshi.sh
- [root@node3 ljy]# more ceshi.sh
- this is two!
默认情况下, 只会替换一行中的第一处. 要想替换一行中不同地方出现的文件必须使用替换标记.
s/pattern/replacement/flags
有四种可用的替换标志:
数字: 表明新文件将替换第几处模式匹配的地方, 比如 2, 替换每行中第二次出现的文本
g : 表明新文件将会替换所有匹配的文本
p : 表明原先行的内容要打印出来 , 通常与 sed 的 - n 一起使用
w file : 将替换的结果写入到文件中
- [root@node3 ljy]# more ceshi.sh
- this is one,one,one
- [root@node3 ljy]# sed -i 's/one/two/2' ceshi.sh
- [root@node3 ljy]# more ceshi.sh
- this is one,two,one
- [root@node3 ljy]# sed -i 's/one/two/g' ceshi.sh
- [root@node3 ljy]# more ceshi.sh
- this is two,two,two
p: 打印 打印出匹配的内容, 通常与 - n 选项和用
=: 用来打印被匹配的行的行号
n: 读取下一行, 遇到 n 时会自动跳入下一行
r,w: 读和写编辑命令, r 用于将内容读入文件, w 用于将匹配内容写入到文件
gawk 程序
gawk 提供了一种编程语言而不只是编程命令.
1, 命令格式
gawk options program file*
options 的可用选项有:
-F fs 指定行中分隔数据字段的字段分隔符. 个人不建议使用这个选项, 在 BEGIN 块中设置 FS 更好. 这个选项只是提供了一个简洁的设置方式.
-f file: 指定读取程序的文件名
-v var=value 定义 gawk 程序中的一个变量及其默认值. 个人不建议使用这个选项, 在 BEGIN 块中设置更好.
-mf N 指定要处理的数据文件中的最大字段数
-mr N 指定数据文件中的最大数据行数
-W keyword 指定 gawk 的兼容模式或警告等级
2, 从命令行读取脚本
- [root@node1 ~]# awk '{print"hello"}'
- asd
- hello
- adf
- hello
- asd
- hello
- qqq
- hello
- [root@n
要终止这个 gawk 程序, 你必须表明数据流已经结束,
ctrl+D 组合键可以在 bash 中产生一个 EOF 字符.
3, 使用数据字段变量
默认情况下, gawk 会将如下变量分配给它在文本中发现的数据字段:
$0 代表整个文本行
$1 代表文本行的第一个数据段
$n 代表文本行的第 n 个数据段
$NF 代表文本行的最后一个数据段
gwak 中默认的字段分隔符书任意的空白字符.
[root@node1 ~]# df -h | gawk '{print $5}'
已用 %
- 5%
- 0%
- 0%
- 1%
- 0%
- 14%
- 0%
- [root@node1 ~]# df -h | gawk '{print $NF}'
挂载点
- /
- /dev
- /dev/shm
- /run
- /sys/fs/cgroup
- /boot
- /run/user/0
- [root@node1 ~]# df -h | gawk '{print $0}'
文件系统 容量 已用 可用 已用 % 挂载点
- /dev/mapper/CentOS-root 42G 2.1G 40G 5% /
- devtmpfs 908M 0 908M 0% /dev
- tmpfs 920M 0 920M 0% /dev/shm
- tmpfs 920M 8.8M 911M 1% /run
- tmpfs 920M 0 920M 0% /sys/fs/cgroup
- /dev/sda1 1014M 142M 873M 14% /boot
- tmpfs 184M 0 184M 0% /run/user/0
4, 在程序脚本中使用多个命令
- [root@node1 ~]# echo 'this is sam' | gawk '{$4="lisi";print $0}'
- this is sam lisi
5, 从文件中读取程序
gawk 编辑器允许将程序存储到文件中, 然后在命令行中引用.
- [root@node1 ljy]# more script.gawk
- {
- print $1 "'s home directory is" $6
- }
- [root@node1 ljy]# gawk -F: -f script.gawk /etc/passwd
- root's home directory is /root
- bin's home directory is /bin
- daemon's home directory is /sbin
- adm's home directory is /var/adm
- lp's home directory is /var/spool/lpd
- sync's home directory is /sbin
- shutdown's home directory is /sbin
- halt's home directory is /sbin
- mail's home directory is /var/spool/mail
- operator's home directory is /root
- games's home directory is /usr/games
- ftp's home directory is /var/ftp
- nobody's home directory is /
- systemd-network's home directory is /
- dbus's home directory is /
- polkitd's home directory is /
- sshd's home directory is /var/empty/sshd
- postfix's home directory is /var/spool/postfix
- chrony's home directory is /var/lib/chrony
- MySQL's home directory is /var/lib/MySQL
- dockerroot's home directory is /var/lib/docker
- ljy's home directory is /home/ljy
来源: https://www.cnblogs.com/jinyuanliu/p/10916516.html