姓名:刘浩然。 2020年大目标Python

awk-sed

sed

# 先读取资料、存入模式空间、对其进行编辑、再输出、再用下一行替换模式空间内容

-n  #不再显示模式空间中的内容(默认显示)

-i  #直接对文本编辑

-r  #正则可不转换特殊字符

--follow-symlinks  #修改软链接文件时 

匹配字符出现的次数

*  #任意多个字符

?  #0或者1个 最小匹配,没有加-r参数需要转义 \?

$  #最后一行

^  #开头行

.*  #匹配任意多个字符

.  #任意单个字符

^$  #空行

 

\?  #0或者1次

\+  #至少出现1次

\{3\}  #精确出现3次

\{2,5\}  #出现2-5次

\  #转义符号

command

d

删除符合条件的行
#sed '1,2d' a.txt
删除文件中包含oot的行
#sed '/oot/d' a.txt
删除第一行及其后两行
#sed '1,+2d' a.txt
删除第一行
#sed '1d' a.txt

 p

显示符合条件的行
显示以/开头的行
#sed -n '/^\//p' a.txt

 a \string

在符合条件的行后面追加新行。string为追加的内容
在以/开头的行后面追加新行,#hello world
sed '/^\//a \#hello world' a.txt
在以/开头的行后面追加两行内容,分别为# hello worl  # hello linux 
# sed '/^\//a \# hello world\n# hello linux' a.txt 

i \string

在符合条件的行前添加新行,string为追加的内容
在文件第1行添加# hello world 
# sed '1i \# hello world' a.txt

c \string 

替换指定行的内容
将文件中最后一行内容替换为End Of File
# sed '$c \End Of File' /1.txt 
   
# sed '7c \SELINUX=disabled' /etc/sysconfig/selinux

=

用于显示每一行的行号
显示/etc/passwd文件最后一行的行号
# sed -n '$=' /etc/passwd
49

s/regex/string/[修饰符] 查找并替换 默认情况下,只替换每一行第1次出现的字符
修饰符:
g:替换每一行所

i:忽略大小写

[root@localhost ~]# sed 's/^#/?/' /etc/fstab 
查找文件中的UUID,并替换为uuid
# sed 's/UUID/uuid/' /etc/fstab    
将行首的/替换成#
# sed 's/^\//#/' /etc/fstab    
[root@localhost ~]# sed 's|/|#|g' /etc/fstab 
将每一行出现的所有/替换为@
# sed 's/\//@/g' /etc/fstab 

删除行首的空格
[root@shellscript ~]# sed 's|^#||' /etc/fstab 

[root@shellscript ~]# history | sed 's|^[[:space:]]\+||'

 

page2image40381408

awk

1、awk内置变量之记录变量

FS:  指定读取文件时的分隔符,默认空白字符,相当于-F

OFS:  指定输出的分隔符,默认空白字符

[root@localhost ~]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
[root@localhost ~]#
[root@localhost ~]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
root /bin/bash

[root@localhost ~]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
[root@localhost ~]# head -n 1 /etc/passwd | awk -F: 'BEGIN{OFS="---"}{print $1,$7}'
root---/bin/bash

 

2、awk内置变量之数据变量

NR:记录awk所处理的文本的行数,如果有多个文件,所有文件统一进行计数

[root@localhost ~]# awk '{print "第",NR,"行内容:",$0}' /etc/hosts /etc/issue
第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
第 3 行内容: CentOS release 6.6 (Final)
第 4 行内容: Kernel \r on an \m
第 5 行内容:

注意:

print在显示变量值时,不需要使用$

FNR:记录awk正在处理的文件的行数,如果有多个文件,每个文件分别进行计数

[root@localhost ~]# awk '{print "第",FNR,"行内容:",$0}' /etc/hosts /etc/issue
第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
第 1 行内容: CentOS release 6.6 (Final)
第 2 行内容: Kernel \r on an \m
第 3 行内容:

 

NF:记录awk正在处理的当前行被分隔成了几个字段
# cat test.txt
this is a test.
# awk '{print NF}' test.txt
4
# awk '{print $NF}' test.txt
test.

 

[root@localhost ~]# awk -F: '{print "Number of line: ", NF}' /etc/passwd

[root@shell ~]# awk -F. '{print "Number of Line: ", NF}' /etc/hosts
[root@shell ~]# awk 'BEGIN{FS="."}{print "Number of Line: ", NF}' /etc/hosts
Number of Line: 6
Number of Line: 3
Number of Line: 6

 

posted @ 2019-02-12 20:37  pluto2charon  阅读(171)  评论(0)    收藏  举报