|
Linux grep、sed、awk(包含练习题)
一、grep
Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。
- 扩展正则表达式实践
此处使用grep -E 进行实践扩展正则,egrep官网已经弃用
- +符号
- `+号表示匹配前一个字符1次或多次,必须使用grep -E 扩展正则`
- [root@localhost /]# grep 'l+' /tmp/luffy.txt -E
- I am oldboy
- I teach linux.
- I like python.
- Our school website is http:/loldboyedu.com
- ?符号
- `匹配前一个字符0次或1次`
- `找到文件中包含gd或god的行`
- [root@localhost /]# grep 'go?d' /tmp/test.txt -E
- gd
- god
- |符号 在正则中表示或者的意思
- `找到/tmp中txt文件,且名字里包含a或b的字符`
- [root@localhost /]# find /tmp -name "*.txt" | grep -E "a|b"
- /tmp/passwd.txt
- /tmp/my_crontab.txt
- ()符号
- `将一个或多个字符捆绑在一起,当作一个整体进行处理`
- [root@localhost /]# grep -E 'g(oo|al)d' /tmp/test.txt
- good
- gald
- a{n,m}匹配a的次数
- `重复前一个字符各种次数,可以通过-o参数显示明确的匹配过程`
- [root@localhost /]# grep -E "x{2,4}" /tmp/xuxu.txt
- xxxxxxxuuuuuu
- xxxxuuuu
- xxuu
- [root@localhost /]# grep -E "x{2,4}" /tmp/xuxu.txt -o
- xxxx
- xxx
- xxxx
- xx
- `最多匹配4次`
- [root@localhost /]# grep -E "x{,4}" /tmp/xuxu.txt
- xxxxxxxuuuuuu
- xxxxuuuu
- xu
- xxuu
- `最少匹配4次`
- [root@localhost /]# grep -E "x{4,}" /tmp/xuxu.txt
- xxxxxxxuuuuuu
- xxxxuuuu
复制代码 二、sed
注意:sed和awk使用单引号,双引号有特殊解释
sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
- sed [options] '{command}[flags]' filename
- 命令选项 内部选项和参数 文件
- 命令选项
- -e script 将脚本中指定的命令添加到处理输入时执行的命令中, 多条件,一行中要有多个操作
- -f script 将文件中指定的命令添加到处理输入时执行的命令中
- -n 仅显示script处理后的结果
- -i 编辑文件内容
- -i.bak 修改时同时创建.bak备份文件。
- -r 使用扩展的正则表达式
- ! 取反 (跟在模式条件后与shell有所区别)
- sed常用内部命令
- a 在匹配后面添加
- i 在匹配前面添加
- p 打印
- d 删除
- s 查找替换
- c 更改
- y 转换 N D P
- flags
- 数字 表示新文本替换的模式
- g: 表示用新文本替换现有文本的全部实例
- p: 表示打印原始的内容
- w filename: 将替换的结果写入文件
- 空地址 全文匹配
- 单地址 指定文件某一行
- /pattern/ 被模式匹配的每一行
- 范围区间 10,20 十到二十行 10,+5第10行向下5行,/pattern1/,/pattern2/
- 步长 1~2,表示1,3,5,7,9行,2~2表示2,4,6,8,10偶数行
复制代码
- `打印第2、3行`
- [root@localhost /]# sed "2,3p" /tmp/luffy.txt -n
- I teach linux.
- I like python.
- `打印第一行和下面3行`
- [root@localhost /]# sed "1,+3p" /tmp/luffy.txt -n
- I am oldboy
- I teach linux.
- I like python.
- I like linux.
- `找出有linux的行并打印`
- [root@localhost /]# sed "/linux/p" /tmp/luffy.txt -n
- I teach linux.
- I like linux.
- `删除第5行至末尾行的内容`
- [root@localhost ~]# sed '5,$d' /tmp/luffy2.txt -i
- `s///替换 g表示全局替换`
- [root@localhost ~]# sed 's/linux/java/g' /tmp/luffy2.txt -i
- [root@localhost ~]# cat /tmp/luffy2.txt
- I teach java.
- I like python.
- `多次替换`
- [root@localhost ~]# sed -e 's/java/linux/g' -e 's/python/c++/g' /tmp/luffy2.txt -i
- [root@localhost ~]# cat /tmp/luffy2.txt
- I teach linux.
- I like c++.
- `在文件第二行后追加一行`
- [root@localhost ~]# sed '2a good good study' /tmp/luffy2.txt -i
- [root@localhost ~]# cat /tmp/luffy2.txt
- I teach linux.
- I like c++.
- good good study
- `在第三行前插入一行`
- [root@localhost ~]# sed '3i happy every day' /tmp/luffy2.txt -i
- [root@localhost ~]# cat /tmp/luffy2.txt
- I teach linux.
- I like c++.
- happy every day
- good good study
- `在每一行加上分隔符`
- [root@localhost ~]# sed 'a -------------' /tmp/luffy2.txt -i
- [root@localhost ~]# cat /tmp/luffy2.txt
- I teach linux.
- -------------
- I like c++.
- -------------
- happy every day
- -------------
- good good study
- -------------
- -------------
- -------------
- `双斜线正则匹配 配合d删除`
- [root@localhost ~]# sed -e '/^$/d' -e '/^#/d' /tmp/luffy2.txt
- I teach linux.
- I like c++.
- happy every day
- good good study
- [root@localhost ~]# sed '/^$/d;/^#/d' /tmp/luffy2.txt
- I teach linux.
- I like c++.
- happy every day
- good good study
- `取出linux的ip地址`
- [root@localhost ~]# ifconfig ens33 | sed '2p' -n | sed 's/^.*inet//' | sed 's/net.*$//'
- 192.168.70.14
- [root@localhost ~]# ifconfig ens33 | sed -e "2s/^.*inet//" -n -e "2s/net.*$//p"
- 192.168.70.14
复制代码 三、awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
1,主要的作用:
用来处理文本,将文本按照指定的格式输出。其中包含了变量,循环以及数组。
2,语法
awk [option] 'pattern[action]' file ...
awk 参数 ‘条件动作’ 文件
Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print 和 printf
3, action动作场景
- $0表示整行
- $NF表示当前分割后的最后一列
- 倒数第二列可以写成$(NF-1)
- `打印所有列`
- [root@localhost ~]# awk '{print $0}' /tmp/awktest.txt
- xux1 xux2 xux3 xux4 xux5
- xux6 xux7 xux8 xux9 xux10
- xux11 xux12 xux13 xux14 xux15
- xux16 xux17 xux18 xux19 xux20
- xux21 xux22 xux23 xux24 xux25
- xux26 xux27 xux28 xux29 xux30
- xux31 xux32 xux33 xux34 xux35
- xux36 xux37 xux38 xux39 xux40
- xux41 xux42 xux43 xux44 xux45
- xux46 xux47 xux48 xux49 xux50
- `打印第一列`
- [root@localhost ~]# awk '{print $1}' /tmp/awktest.txt
- xux1
- xux6
- xux11
- xux16
- xux21
- xux26
- xux31
- xux36
- xux41
- xux46
复制代码 4,内置变量
NR 表示当前文件的行数
NF 表示当前文件有几列
FS 表示当前的列分隔符
RS 表示当前的行分隔符
OFS 输出字段分隔符
ORS 输出记录分隔符- [root@localhost ~]# awk 'NR==5{print $0}' /tmp/awktest.txt
- xux21 xux22 xux23 xux24 xux25
- [root@localhost ~]# awk 'NR==5, NR ==6{print $0}' /tmp/awktest.txt
- xux21 xux22 xux23 xux24 xux25
- xux26 xux27 xux28 xux29 xux30
- `打印第1-3行所有列`
- [root@localhost ~]# awk 'NR==1,NR ==3{print $0}' /tmp/awktest.txt
- xux1 xux2 xux3 xux4 xux5
- xux6 xux7 xux8 xux9 xux10
- xux11 xux12 xux13 xux14 xux15
- `打印行号NR`
- [root@localhost ~]# awk '{print NR,$0}' /tmp/awktest.txt
- 1 xux1 xux2 xux3 xux4 xux5
- 2 xux6 xux7 xux8 xux9 xux10
- 3 xux11 xux12 xux13 xux14 xux15
- 4 xux16 xux17 xux18 xux19 xux20
- 5 xux21 xux22 xux23 xux24 xux25
- 6 xux26 xux27 xux28 xux29 xux30
- 7 xux31 xux32 xux33 xux34 xux35
- 8 xux36 xux37 xux38 xux39 xux40
- 9 xux41 xux42 xux43 xux44 xux45
- 10 xux46 xux47 xux48 xux49 xux50
- [root@localhost ~]# awk '{print $(NF-2),$(NF-1),$NF}' /tmp/awktest.txt
- xux3 xux4 xux5
- xux8 xux9 xux10
- xux13 xux14 xux15
- xux18 xux19 xux20
- xux23 xux24 xux25
- xux28 xux29 xux30
- xux33 xux34 xux35
- xux38 xux39 xux40
- xux43 xux44 xux45
- xux48 xux49 xux50
- `ip地址`
- [root@localhost ~]# ifconfig ens33 | awk 'NR==2{print $2}'
- 192.168.70.14
复制代码 5, 自定义输出
注意:awk,必须 外层单引号,内层双引号
内置变量 $1、$2 都不得添加双引号,否则会识别为文本,尽量别加引号
- `使用逗号默认空格分隔`
- [root@localhost ~]# awk '{print $1,$3,$5}' /tmp/awktest.txt
- xux1 xux3 xux5
- xux6 xux8 xux10
- xux11 xux13 xux15
- xux16 xux18 xux20
- xux21 xux23 xux25
- xux26 xux28 xux30
- xux31 xux33 xux35
- xux36 xux38 xux40
- xux41 xux43 xux45
- xux46 xux48 xux50
- [root@localhost ~]# awk '{print "n1: "$1,"n2: "$3,"n3: "$5}' /tmp/awktest.txt
- n1: xux1 n2: xux3 n3: xux5
- n1: xux6 n2: xux8 n3: xux10
- n1: xux11 n2: xux13 n3: xux15
- n1: xux16 n2: xux18 n3: xux20
- n1: xux21 n2: xux23 n3: xux25
- n1: xux26 n2: xux28 n3: xux30
- n1: xux31 n2: xux33 n3: xux35
- n1: xux36 n2: xux38 n3: xux40
- n1: xux41 n2: xux43 n3: xux45
- n1: xux46 n2: xux48 n3: xux50
复制代码 6, 功能性参数
-F 指定分割字段符
-v 定义或修改一个awk内部的变量
-f 从脚本文件中读取awk命令
输入分隔符,awk默认是空格,空白字符,英文是field separator,变量名是FS
输出分隔符,output field separator,简称0FS
awk模式
关系运算符含义用法示例</tdtd小于/tdtdx < y/td/trtrtd=/tdtd小于等于/tdtdx = y/td/trtrtd==/tdtd等于/tdtdx == y/td/trtrtd!=/tdtd不等于/tdtdx != y/td/trtrtd=/tdtd大于等于/tdtdx = y/td/trtrtd>大于x > y~与对应的正则匹配则为真x ~ /正则/!~与对应的正则不匹配则为真x !~ /正则/- `-F 自定义输入分隔符`
- [root@localhost ~]# awk -F ":" 'NR==1{print $0}' /tmp/passwd.txt
- root:x:0:0:root:/root:/bin/bash
- [root@localhost ~]# awk -F ":" 'NR==1{print $1}' /tmp/passwd.txt
- root
- `还可以用 FS 搭配-v 使用 改变输入分隔符`
- [root@localhost ~]# awk -v FS=":" 'NR==1{print $1}' /tmp/passwd.txt
- root
- `使用单个逗号 输出分隔符默认是空格`
- [root@localhost ~]# awk -F":" 'NR==1{print $1,$NF}' /tmp/passwd.txt
- root /bin/bash
- `自定义输出分割符号`
- [root@localhost ~]# awk -F":" 'NR==1{print $1,"----------",$NF}' /tmp/passwd.txt
- root ---------- /bin/bash
- `OFS 修改默认输出分隔符`
- [root@localhost ~]# awk -F":" -v OFS="---------" 'NR==1{print $1,$NF}' /tmp/passwd.txt
- root---------/bin/bash
- `将输出分隔符修改为制表符`
- [root@localhost ~]# awk -F":" -v OFS="\t" 'NR==1{print $1,$NF}' /tmp/passwd.txt
- root /bin/bash
- `RS 指定符号为换行符`
- [root@localhost ~]# awk -v RS=' ' '{print NR,$0}' /tmp/awktest.txt
- 1 xux1
- 2 xux2
- 3 xux3
- 4 xux4
- 5 xux5
- 6
- xux6
- 7 xux7
- 8 xux8
- 9 xux9
- 10 xux10
- 11
- xux11
- `ORS 将换行符换成自定义符号`
- [root@localhost ~]# awk -v ORS='--------' '{print NR,$0}' /tmp/awktest.txt
- 1 xux1 xux2 xux3 xux4 xux5 --------2 xux6 xux7 xux8 xux9 xux10 --------3 xux11 xux12 xux13 xux14 xux15 --------4 xux16 xux17 xux18 xux19 xux20 --------5 xux21 xux22 xux23 xux24 xux25 --------6 xux26 xux27 xux28 xux29 xux30 --------7 xux31 xux32 xux33 xux34 xux35 --------8 xux36 xux37 xux38 xux39 xux40 --------9 xux41 xux42 xux43 xux44 xux45 --------10 xux46 xux47 xux48 xux49 xux50--------
- `BEGIN模式`
- [root@localhost ~]# awk 'BEGIN{print "这是begin模式"} NR==1{print NR,$0}' /tmp/awktest.txt
- 这是begin模式
- 1 xux1 xux2 xux3 xux4 xux5
- `BEGIN模式可以不加文件; awk可以使用自定义变量`
- [root@localhost ~]# awk -v name="plmm" 'BEGIN{print "我喜欢",name}'
- 我喜欢 plmm
- `ARGV[N] 第一个是awk命令本身 第二个是文件名`
- [root@localhost ~]# awk '{print ARGV[0],ARGV[1],$0}' /tmp/awktest.txt
- awk /tmp/awktest.txt xux1 xux2 xux3 xux4 xux5
- awk /tmp/awktest.txt xux6 xux7 xux8 xux9 xux10
- awk /tmp/awktest.txt xux11 xux12 xux13 xux14 xux15
- awk /tmp/awktest.txt xux16 xux17 xux18 xux19 xux20
- awk /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25
- awk /tmp/awktest.txt xux26 xux27 xux28 xux29 xux30
- awk /tmp/awktest.txt xux31 xux32 xux33 xux34 xux35
- awk /tmp/awktest.txt xux36 xux37 xux38 xux39 xux40
- awk /tmp/awktest.txt xux41 xux42 xux43 xux44 xux45
- awk /tmp/awktest.txt xux46 xux47 xux48 xux49 xux50
- [root@localhost ~]# awk '{print ARGV[0],ARGV[1],ARGV[2],$0}' /tmp/awktest.txt
- awk /tmp/awktest.txt xux1 xux2 xux3 xux4 xux5
- awk /tmp/awktest.txt xux6 xux7 xux8 xux9 xux10
- awk /tmp/awktest.txt xux11 xux12 xux13 xux14 xux15
- awk /tmp/awktest.txt xux16 xux17 xux18 xux19 xux20
- awk /tmp/awktest.txt xux21 xux22 xux23 xux24 xux25
- awk /tmp/awktest.txt xux26 xux27 xux28 xux29 xux30
- awk /tmp/awktest.txt xux31 xux32 xux33 xux34 xux35
- awk /tmp/awktest.txt xux36 xux37 xux38 xux39 xux40
- awk /tmp/awktest.txt xux41 xux42 xux43 xux44 xux45
- awk /tmp/awktest.txt xux46 xux47 xux48 xux49 xux50
- `在引用外部变量`
- [root@localhost ~]# what="我喜欢plmm!!!"
- [root@localhost ~]# awk -v name=$what 'BEGIN{print name}'
- 我喜欢plmm!!!
复制代码 7, print 和 printf 的区别
- printf动作默认不会添加换行符
- print 默认添加空格换行符
- printf需要指定format;
- %d打印单个ASCII 字符 printf("The character is %c\n",x) 输出: The character is A%d打印一个十进制数 printf("The boy is %d years old\n",y) 输出:The boy is 15 years old%e打印数字的e 记数法形式 printf("z is %e\n",z) 打印: z is 2.3e+0 1%f打印一个浮点数 printf("z is %f\n", 2.3 * 2) 输出: z is 4.600000%o打印数字的八进制 printf("y is %o\n",y) 输出:z is 17%s打印一个字符串 print("The name of the culprit is %s\n",$1) 输出:The name of the culprit is Bob Smith
- printf修饰符
- -:左对齐,默认右对齐
- +:显示数值符号;printf "%+d"
- [root@localhost ~]# awk '{printf $1}' /tmp/awktest.txt
- xux1xux6xux11xux16xux21xux26xux31xux36xux41xux46[root@localhost ~]#
- `%s`
- [root@localhost ~]# awk '{printf "%s\n",$1}' /tmp/awktest.txt
- xux1
- xux6
- xux11
- xux16
- xux21
- xux26
- xux31
- xux36
- xux41
- xux46
- [root@localhost ~]# awk '{printf "第一列 %s 第二列 %s 第三列 %s\n",$1,$2,$3}' /tmp/awktest.txt
- 第一列 xux1 第二列 xux2 第三列 xux3
- 第一列 xux6 第二列 xux7 第三列 xux8
- 第一列 xux11 第二列 xux12 第三列 xux13
- 第一列 xux16 第二列 xux17 第三列 xux18
- 第一列 xux21 第二列 xux22 第三列 xux23
- 第一列 xux26 第二列 xux27 第三列 xux28
- 第一列 xux31 第二列 xux32 第三列 xux33
- 第一列 xux36 第二列 xux37 第三列 xux38
- 第一列 xux41 第二列 xux42 第三列 xux43
- 第一列 xux46 第二列 xux47 第三列 xux48
- `%d`
- [root@localhost ~]# awk 'BEGIN{printf "%d%d%d%d\n",1,2,3,4}'
- 1234
- `- +对齐`
- [root@localhost ~]# awk '{printf "第一列 %-20s第二列 %-20s第三列 %-20s\n",$1,$2,$3}' /tmp/awktest.txt
- 第一列 xux1 第二列 xux2 第三列 xux3
- 第一列 xux6 第二列 xux7 第三列 xux8
- 第一列 xux11 第二列 xux12 第三列 xux13
- 第一列 xux16 第二列 xux17 第三列 xux18
- 第一列 xux21 第二列 xux22 第三列 xux23
- 第一列 xux26 第二列 xux27 第三列 xux28
- 第一列 xux31 第二列 xux32 第三列 xux33
- 第一列 xux36 第二列 xux37 第三列 xux38
- 第一列 xux41 第二列 xux42 第三列 xux43
- 第一列 xux46 第二列 xux47 第三列 xux48
复制代码 grep 练习题
- `找出root开头的行`
- [root@localhost ~]# grep '^root' /tmp/passwd.txt
- root:x:0:0:root:/root:/bin/bash
- `匹配以root开头或者以mysql开头的行,注意定位锚点`
- [root@localhost ~]# grep -E '^(root|mysql)' /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
- `过滤出除了root开头的行`
- [root@localhost ~]# grep -v '^root' /etc/passwd
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- `统计root出现的次数`
- [root@localhost ~]# grep 'root' /etc/passwd -c
- 2
- `匹配test用户最多一次 -m`
- [root@localhost ~]# grep '^test' /etc/passwd -m 1
- test:x:1000:1000:test:/home/test:/bin/bash
- `匹配多个文件,列出存在信息的文件名字`
- [root@localhost ~]# grep 'test' /tmp/passwd.txt /etc/passwd /tmp/test.txt -l
- /tmp/passwd.txt
- /etc/passwd
- `显示/etc/passwd文件中不以/bin/bash结尾的行`
- [root@localhost ~]# grep -v '/bin/bash$' /tmp/passwd.txt
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- `匹配uid和gid是2,3数字的行`
- [root@localhost ~]# grep -E '\<[0-9]{2,3}\>' /tmp/passwd.txt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- nobody:x:99:99:Nobody:/:/sbin/nologin
- systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
- `找出文件中,以至少一个空白字符开头,后面是非空字符的行`
- [root@localhost ~]# grep '^[[:space:]].*' /tmp/luffy2.txt
- happy every day
- [root@localhost ~]# grep '^[[:space:]]+[^[:space:]]' /tmp/luffy2.txt -E
- happy every day
-
- [root@localhost ~]# grep -E '^(root|mysql|xiao)' /tmp/passwd.txt
- root:x:0:0:root:/root:/bin/bash
- xiaosang:x:1001:1001::/home/xiaosang:/bin/bash
- mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
- xiao:x:555:555::/home/www:/shbin/nologin
- xiao1:x:555:555::/home/www:/shbin/nologin
- [root@localhost ~]# grep -E '^(root|mysql|xiao)\>' /tmp/passwd.txt
- root:x:0:0:root:/root:/bin/bash
- mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
- xiao:x:555:555::/home/www:/shbin/nologin
-
- `找出/etc/init.d/functions文件中的所有函数名`
- [root@localhost ~]# grep -E '[a-zA-Z]+\(\)' /etc/init.d/functions
- checkpid() {
- __kill_pids_term_kill_checkpids() {
- __kill_pids_term_kill() {
- __pids_var_run() {
- __pids_pidof() {
- daemon() {
- killproc() {
- `找出:前面字符与结尾相同的行`
- [root@localhost ~]# grep -E '^([^:]+).*\1$' /tmp/passwd.txt
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- nobody:x:99:99:Nobody:/:/sbin/nologin
- ntp:x:38:38::/etc/ntp:/sbin/nologin
- nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
- nginx:x:987:981:Nginx web server:/var/lib/nginx:/sbin/nologin
复制代码 sed 练习题
- `将开头是#符号的行和空行删除`
- [root@localhost ~]# sed -e '/^$/d' -e '/^#/d' /tmp/luffy2.txt
- I teach linux.
- I like c++.
- happy every day
- good good study
- `将文本中空行,开头是空格的行替换为#`
- [root@localhost ~]# sed -e 's/^[[:space:]]/#/g' -e 's/^$/#/g' /tmp/luffy2.txt
- I teach linux.
- #
- I like c++.
- #
- happy every day
- #
- #good good study
- #
- #
- `在文本前三行加上@符号` ==用了扩展正则表达式 -r,引用了原文 \1==
- [root@localhost ~]# sed -r '1,3s/(^.)|(^$)/@\1/' /tmp/luffy2.txt
- @I teach linux.
- @
- @I like c++.
- happy every day
- good good study
-
-
- `sed 取ip地址`
- [root@localhost ~]# ifconfig
- ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- inet 192.168.70.14 netmask 255.255.255.0 broadcast 192.168.70.255
- inet6 fe80::3a93:caf:b995:b1d6 prefixlen 64 scopeid 0x20<link>
- ether 00:0c:29:c0:b0:a1 txqueuelen 1000 (Ethernet)
- RX packets 13469 bytes 1208013 (1.1 MiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 9149 bytes 1040700 (1016.3 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
- [root@localhost ~]# ifconfig ens33 | sed '2s/^.*inet//;2s/netm.*//p' -n
- 192.168.70.14
- `sed 找出系统版本`
- [root@localhost ~]# cat /etc/centos-release
- CentOS Linux release 7.9.2009 (Core)
- `中括号中间^取反,+贪婪匹配,() \1 扩展正则`
- [root@localhost ~]# sed -r 's/^.*release[[:space:]]//;s/([^.]+).*/\1/p' /etc/centos-release -n
- 7
复制代码 awk练习题
<blockquote>[code]`在当前系统中打印用户的用户名和家目录`[root@localhost ~]# awk -F ":" '$3>=1000{print $1,$(NF-1)}' /tmp/passwd.txt nfsnobody /var/lib/nfstest /home/testxiaosang /home/xiaosangbiaosang /home/biaosang`给/tmp/xuxu.txt文件的前五行,添加#号`[root@localhost ~]# awk 'NR |
|