(一)grep模式匹配命令
1.grep 'shiyanlou' /etc/group 查找/etc/group文件中以"shiyanlou"开头的行
grep '^shiyanlou' /etc/group
2.echo 'zero\nzo\nzoo' | grep 'z.*o' 匹配以'z'开头,以'o'结尾的所有字符串
echo 'zero\nzo\nzoo' | grep 'z.o' 匹配以'z'开头,以'o'结尾,中间包含一个任意字符的字符串
echo 'zero\nzo\nzoo' | grep 'zo*' 匹配以'z'开头,以任意多个'o'结尾的字符串
3.echo '1234\nabcd' | grep [a-z] 匹配所有小写字母(\n为换行符)
echo '1234\nabcd' | grep '[[:lower:]]' 匹配所有小写字母
4.echo '1234\nabcd' | grep[0-9] 匹配所有数字
echo '1234\nabcd' | grep '[[:digit:]]' 匹配所有数字
5.echo '1234\nabcd' | grep '[[:lower:]]' 匹配所有小写字母
echo '1234\nabcd' | grep '[[:upper:]]' 匹配所有大写字母
echo '1234\nabcd' | grep '[[:alpha:]]' 匹配所有字母
6.echo '1234\nabcd' | grep '[[:alnum:]]' 匹配所有数字和字母,包括0-9,a-z,A-Z
(二)sed流编辑器
1.sed-i '1s/sad/happy/' test 将test文件第一行的"sad"替换为"happy" (-i直接修改输入的文件内容)
sed-i 's/sad/happy/g' test g表示全局范围
sed-i '1s/sad/happy/4' test 4表示指定行中的第四个匹配字符串
2.打印指定行
nl passwd | sed -n '2,5p' 打印2-5行(-n只打印受影响的行)
nl passwd | sed -n '1~2p' 打印奇数行
3.行内替换
sed -n 's/shiyanlou/hehe/gp' passwd 将"shiyanlou"全局替换为"hehe",并只打印替换的那一行,这里不能省略最后的"p"
4.行间替换
nl passwd | grep 'shiyanlou' 打印"shiyanlou"所在行数及内容(28行)
sed-i '28c\www.shiyanlou.com' passwd 将28行内容修改为www.shiyanlou.com
nl passwd | sed -n '28p' 打印28行内容
(三)awk文本处理语言
pattern {action} 所有的动作操作用{}花括号括起来,没有pattern默认输入全部文本,没有action默认打印匹配内容到屏幕
先输入:
vim test
I like linux
www.shiyanlou.com
1.使用awk将文本内容打印到终端
awk '{
>}' test
2.将test的第一行的每个字段单独显示为一行
awk '{
>if(NR==1){ (NR表示当前读入的记录数)
>print $1 "\n" $2 "\n" $3
>} else {
>print}
>}' test
或者
awk '{
>if(NR==1){
>OFS="\n" (OFS表示输出时字段的分隔符)
>print $1,$2,$3
>} else {
>print}
3.将test的第二行的以点为分段的字段换成以空格为分隔
awk -F'.' '{ (-F参数预先指定待处理记录的字段分隔符)
>if(NR==2){
>print $1 "\t" $2 "\t" $3
>}}' test
或者
awk '
>BEGIN{ (BEGIN表达式指示了后面的动作将在所有动作之前进行)
>FS="." (FS赋值了新的"."代替默认的空格)
>OFS="\t"
>}{
>if(NR==2){
>print $1,$2,$3
>}}' test