码迷,mamicode.com
首页 > 系统相关 > 详细

shell高级-----初识sed和gawk

时间:2019-05-24 14:09:51      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:opera   文本文件   文本编辑器   gawk   ftp   方便   $0   大文件   postfix   

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

 

shell高级-----初识sed和gawk

标签:opera   文本文件   文本编辑器   gawk   ftp   方便   $0   大文件   postfix   

原文地址:https://www.cnblogs.com/jinyuanliu/p/10916516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!