grep sed akw
#打印2-4行
[root@localhost ~]# sed -n '2,4p' test
[root@localhost ~]# awk 'NR==2,NR==4{print}' test
打印单行
[root@localhost ~]# sed -n '4'p test
[root@localhost ~]# awk 'NR==4{print}' test
#打印关键字行
[root@localhost ~]# grep 'zx' test
[root@localhost ~]# sed -n '/zz/p' test #别忘了-n
[root@localhost ~]# awk '/zz/{print}' test
打印关键字所在的行号
awk '/zz/{print NR}' test
sed -n '/hello/=' file
打印文件一共多少行
awk END'{print NR}' file
awk '{print NR}' file|tail -n1
[root@localhost ~]# echo -e "1@2@3" |awk 'BEGIN{RS="@"}{print $0}'
1
2
3
[root@localhost ~]# echo -e "1@2@3" |awk 'BEGIN{RS="@"}{print $0,RT}' #以RS切割
1 @
2 @
3
RS是某个固定的值时,RT就是RS的内容。
[root@localhost ~]# echo -e "1\n2\n3\n"|awk 'BEGIN{ORS="@"}{print $0}' # echo打印\n时要加-e 和"" 切记切记 ORS用@替换默认的\n ORS和RS默认分割都是\n ORS可以看做是RS倒过来的
形式 以 ORS替换原来的\n 切割
1@2@3@@[root@localhost ~]#
grep 查询 sed 替换、插入 awk 按域查找
grep
-c 匹配行数量
-i 忽略大小写
-h 多文件查询不显示文件名
-l 只列出符合匹配的文件名,不显示具体的匹配行内容
-n 列出匹配行,并显示行号
-s 不显示,当查询不存在的文件名时出现错误信息将不会显示
-v 相反查询,显示不匹配的行
-w 匹配整个词
-x 匹配整行
-r 递归搜索,不仅搜索当前工作目录,而且搜索字目录
-q 不会输出任何结果 ,匹配成功$?为0 不成功为1
--color 显示匹配颜色 (用ssh软件自动带颜色 )
-A2 多加显示后两行
-B3 多加显示前3行
-C4 多加显示前后4行
-o 只显示匹配到的字符串
-E 支持扩展的正则表达式 grep -E 'C|cat' file grep -E '^[[:space:]]+' file 开头至少一个空白字符的行 grep -E = egrep
分类: Linux
先看man中介绍:
-o, --only-matching: 只显示匹配部分的内容
Show only the part of a matching line that matches PATTERN.
-P, --perl-regexp:
Interpret PATTERN as a Perl regular expression.
例如
# echo "helloworld123456"| grep -o -P '\d+'
返回 123456
#echo "helloworld123456"| grep -o -P '[a-z]+' #拓展正则 用egrep不加P也行
返回 helloworld
-P 选项是利用PERL的正则语法进行匹配
zzx@zzx134:~/dhcptest$ cat aaa; grep -q 33 aaa;echo $?;grep -q nihao aaa;echo $?
a b c d aa bb:11:33:::kkk
1 2 3 4 cc dd:22:44:::qqq
0
1
zzx@zzx134:~/dhcptest$ grep -c ^$ aaa #空白行数量
4
zzx@zzx134:~/dhcptest$ grep -cv ^$ aaa #非空行
2
zzx@zzx134:~/dhcptest$ grep "\<aa\>" aaa #精确匹配
a b c d aa bb:11:33:::kkk
zzx@zzx134:~/dhcptest$ grep "\<a\>" aaa
a b c d aa bb:11:33:::kkk
zzx@zzx134:~/dhcptest$ grep [ab] aaa
a b c d aa bb:11:33:::kkk
zzx@zzx134:~/dhcptest$ grep [^ab] aaa #包含空
a b c d aa bb:11:33:::kkk
1 2 3 4 cc dd:22:44:::qqq
zzx@zzx120:~/zzx1/test1/test$ cat 11.txt |grep "[^1]"
1 11 111
111 111
123 456 333
asd aaa
the
zzx@zzx120:~/zzx1/test1/test$ cat 11.txt |grep "[^1 ]"
123 456 333
asd aaa
the
hello i am zzx
hello i am zzx
zzx@zzx134:~/dhcptest$ grep -E "bb|dd" aaa #扩张正则表达式 grep -E 等于 egrep grep -F等于 fgrep
a b c d aa bb:11:33:::kkk
1 2 3 4 cc dd:22:44:::qqq
awk
默认以空格为域分隔
zzx@zzx134:~$ ll |awk '$5>102400 {print $9}' #打印大小大于100k的文件名
echo "1:ab cd:line" |awk -F':' '{if($2=="ab cd")print "yes"}'
awk '{if($2!="in") print $2" "$4}
sed
cat 2.txt |sed 's/^[ \t]*//g' #删除行首空格或者tab
y 对应字符替换 e 连续字符替换 's/123/abc/g' 123整体换成abc 单独一个1是不会替换的 'y/123/abc/' 后面不加g 1换a 2换b 3换c 123个数要和abc对称 不能123/abcd 单独一个1会被替换成a
-i 写入文件 sed -i 's/123//g' file ( s/A/B/g A替换B )
i 特定行前插入一行 sed '/123/iAA' file 最好写'/123/i\AA\' sed -i '/bb/i\\' file 特定行插入空行
a特定行后插入一行 sed '/123/aAA' file
d 删除特定行 sed '/123/'d file sed '1'd file
p 打印特定行 sed -n '/113/'p file sed -n '1'p file // 一定要加 sed -n '$p' 打印最后一行 sed -n 1,3p 打印1到3行 不能用1-3
-e 多个执行 sed -e '/5/'d -e '/N/'d at.txt 精确匹配用\<xxx\>
r 特定行后添加其他文本内容 sed ‘2r file1’ file2 file1的内容添加到file2文件的第二行后
w 符合的行保存到文件中 sed ‘/oot/w file’ file2 file2中符合oot的行保存到file中
s 查找替换 / @ # sed 's/A/B/' file A换车B 每行的第一个A 加g代表全局所有A s///g 加数字代表第几个匹配 s///2 替换第二个匹配 i忽略大小写 & 引用模式匹配整个串 sed 's/l..k/&r/g' file 文件中 like love 等后面添加一个r liker lover
sed 'Xs/A/B/' file 对X行操作 A换成B
sed '2s/\<abs\>/nihao/2' file 把第二行的第二次匹配的abs换成nihao
zzx@zzx11:~$ cat a
hello,like a love
hey,leee or LEEE
zzx@zzx11:~$ sed 's#l..e#&r#' a
hello,liker a love
hey,leeer or LEEE
zzx@zzx11:~$ sed 's#l..e#&r#g' a
hello,liker a lover
hey,leeer or LEEE
zzx@zzx11:~$ sed 's#l..e#&r#ig' a
hello,liker a lover
hey,leeer or LEEEr
\(...\) 正则表达式分组。进行子字符串提取(substring extraction)一起使用很有用
\n 第 n 个分组内容
{n} n是一个非负整数。匹配确定的n次。例如,''o{2}'' 不能匹配 "Bob"中的''o'',但是能匹配"food" 中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,''o{2,}'' 不能匹配"Bob"中的'o'',但能匹配 "foooood"中的所有o。''o{1,}''等价于''o+''。''o{0,}''则等价于''o*''。
\{ \} 指示前面正则表达式匹配的次数.
[root@localhost ~]# sed -n -e '/66/p' -e '/2/p' 1 #打印含有2和66的行
zzx@zzx11:~$ sed 's#\(l..e\)#\1r#ig' a
hello,liker a lover
hey,leeer or LEEEr
zzx@zzx134:~$ cat abc
ofjoaf
fjafjoa
..ofjoaf
zzx@zzx134:~$ sed 's/o/X/g' abc
XfjXaf
fjafjXa
..XfjXaf
zzx@zzx134:~$ cat abc
ofjoaf
fjafjoa
..ofjoaf
zzx@zzx134:~$ sed -i 's/o/X/g' abc
zzx@zzx134:~$ cat abc
XfjXaf
fjafjXa
..XfjXaf
sed常用命收集:test.txt做测试
zzx@zzx103:~$ cat at.txt
1113
33465
a
r
zzx@zzx103:~$ sed '/r/aNO' at.txt #含有r的行后加 '/1/aNO' 含有1的行后加NO 或写成 '/r/'aNO
1113
33465
a
r
NO
echo "123" | sed 'y/13/34/'- 324
- echo "123" | sed 's/1/3/g;s/3/4/g'
- 424
- echo "axxbxxcxx" | sed 'y/abc/123/'
- 1xx2xx3xx