linux文本排序统计、快捷键和通配符及引号
一、文本排序、统计类命令
1.wc命令用于统计指定文本文件的行数、字数或字节数。
(1)格式:“wc [参数] 文件名称”
(2)wc: 行数 单词数 字节数
常用选项:
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
(3)例1:查看系统中装了多少个软件
[root@server ~]# rpm -qa | wc -l
1322
2.sort命令用于对文本内容进行再排序
(1)格式:“sort [参数] 文件名称”
(2)常用选项:
参数 | 作用 |
-f | 忽略大小写 |
-b | 忽略缩进空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定文件间隔符 |
-k | 设定字段范围,按哪一列排序 |
(3)示例:
例1:按英文字母排序
[root@server ~]# cat s1.txt
afasg
fvsgeswg
sgbsrgr
sgsrgf
xbf
egtbf
cdgza
lkegpe
[root@server ~]# sort s1.txt
afasg
cdgza
egtbf
fvsgeswg
lkegpe
sgbsrgr
sgsrgf
xbf
例2:按照年龄进行排序
[root@server ~]# sort -t" " -k2 -n s1.txt
afasg 12
sgbsrgr 13
sgsrgf 14
fvsgeswg 24
egtbf 64
cdgza 67
lkegpe 114
xbf 345
例3:将年龄进行降序排序
[root@server ~]# sort -t" " -k2 -nr s1.txt
xbf 345
lkegpe 114
cdgza 67
egtbf 64
fvsgeswg 24
sgsrgf 14
sgbsrgr 13
afasg 12
例4:去除文件中的重复行
shanghai
xian
chengdu
suzhou
jiangsu
xian
chengdu
suzhou
[root@server ~]# sort -u s1.txt
chengdu
jiangsu
shanghai
suzhou
xian
3.cut命令用于按列提取文本内容
(1)格式:“cut [参数] 文件名称”。
(2)常用选项:
参数 | 选项 |
-d | 分隔符 |
-f | 输出字段 |
-c | 输出字符个数 |
(3)示例:
例1:输出文件/etc/passwd前十行的用户名
[root@server ~]# cut -d":" -f1 /etc/passwd | head
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
例2:输出文件/etc/passwd前十行里面的用户名,uid,gid
[root@server ~]# cut -d":" -f1,3-4 /etc/passwd | head---不连续字段用逗号(,)隔开、连续字段用(-)连接
root:0:0
bin:1:1
daemon:2:2
adm:3:4
lp:4:7
sync:5:0
shutdown:6:0
halt:7:0
mail:8:12
operator:11:0
例3:输出文件/etc/passwd前十行的前八个字符
[root@server ~]# cut -c 1-8 /etc/passwd | head
root:x:0
bin:x:1:
daemon:x
adm:x:3:
lp:x:4:7
sync:x:5
shutdown
halt:x:7
mail:x:8
operator
4.uniq命令用于去除文本中连续的重复行
(1)格式:“uniq [参数] 文件名称”
-c 统计文件中相同的行
(2)示例:
面试题:统计/etc/passwd文件中的shell类型
[root@server ~]# cut -d: -f7 /etc/passwd | sort ---让相同的东西连在一起
[root@server ~]# cut -d":" -f7 /etc/passwd | sort | uniq -c | sort -nr
40 /sbin/nologin
7 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
5.tr 命令用于转换或删除文件中的字符
(1)语法:
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
(2)常用命令:
[:alnum:] all letters and digits ---数字和大小写字母
[:alpha:] all letters ---大小写字母
[:digit:] all digits ---数字[0-9]
[:lower:] all lower case letters ---小写字母[a-z]
[:space:] all horizontal or vertical whitespace
[:upper:] all upper case letters ---大写字母[A-Z]
例:小写转大写
[root@server ~]# echo "Welcome to the Linux" | tr 'a-z' 'A-Z'---小写转大写
[root@server ~]# echo "Welcome to the Linux" | tr [[:lower:]] [[:upper:]]
WELCOME TO THE LINUX
(3)参数说明
- -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行 转换
- -d, --delete:删除指令字符
- -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
- -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
- --help:显示程序用法信息 --version:显示程序本身的版本信息
二、快捷键的使用
1.history查阅命令历史记录
(1)执行方式:利用向上或向下光标键来进行查询;第二种办法是执行“history [n]” 命令来查询。
(2)history(选项)(参数)
选项:
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d:删除历史记录中第offset个命令
-n:读取指定文件
参数:
n:打印最近的n条历史命令。
(3)history的使用
1> 默认显示1000条命令。
[root@server ~]# vim /etc/profile—HISTSIZE=1000
2> 面试题:改变history默认输出(包含用户、ip、时间等)
法1:/etc/profile文件中加入以下内容
HISTTIMEFORMAT=”%F %T `whoami` ”
USER_IP=`who -u am I 2> /dev/null | awk ‘{print $NF}’ | sed -e ‘s/[()] //g`
export HISTTIMEFORMAT=” [%F %T] [`whoami`][${USER_IP}] ”
或者不添加第一行,直接添加后两行:
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
export HISTTIMEFORMAT="[%F %T][`whoami`][${USER_IP}] "
法2:执行:source /etc/passwd
效果:
[root@server ~]# history
1 [2020-12-25 18:10:27][root][111.18.44.17]
2 [2020-12-20 10:35:16][root][111.18.44.17] cat /etc/redhat-release
3 [2020-12-20 14:02:20][root][111.18.44.17] exit
4 [2020-12-24 09:39:17][root][111.18.44.17] cat /etc/redhat-release
5 [2020-12-24 10:06:17][root][111.18.44.17] awk 'NR==5' /etc/passwd
6 [2020-12-24 10:08:31][root][111.18.44.17] whereis ifconfig
2.断行符“\”
对于符号比较多的长命令,尽管系统在到达行尾时会自动将长命令行换到下一行,但也可以使用反斜杠“\”再加回车,将一个较长的命令分成多行表达。增强命令的可读性,换行后系统自动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部分。
例:
[root@server ~]# ls /etc/sysconfig/network-scripts/ \
> /tmp
3.一行输入多个命令“;”
若要在一行上输入和执行多条较短的命令,可使用分号来分隔命令。
例:
[root@server ~]# date; ls /tmp ;history
4.快捷方式
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏 Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)
Ctrl+R 可以使用该快捷键来搜索历史命令
引用上一条命令的最后一个参数
方法1:!$
方法2:Alt+.(可能与快捷键冲突)
方法3:Esc,.
Alt+. 无法使用的解决方法:
三、通配符
1.含义:通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来模糊搜索文件,当查找目录或文件时, 可以使用通配符来代替一个或多个真正字符。
2.作用范围:目录和文件名
3.常见通配符:常用通配符包括 "*"、"?" 、"[ ]"、 "[^ ]" 、"[! ]"和"{}"
4.常用选项
字符 | 含义 |
* | 匹符配任意字 |
? | 匹配单个字符 |
[] | 匹配方括号中的任意一个,不能用于创建目录和文件 |
[^] | 匹配方括号中的任意一个字符或数字后进行取反,等同于[! ],表示范围可以 用".."或"—”,用于查找和删除目录和文件,不用于创建目录和文件 |
[!] | 匹配方括号中的任意一个字符或数字后进行取反, 等同于[^ ],表示范围可以 用".."或"—", 用于查找和删除目录和文件,不用于创建目录和文件 |
[?-?] | 匹配方括号范围内任意一个,用于查询、删除,但不能用于创建目录和文件 |
{string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间的个数用".." |
示例:
[root@server ~]# touch f.txt f{1..6}.txt f{11..16}.txt f{111..116}.txt
[root@server ~]# ls f*.txt
f111.txt f114.txt f11.txt f14.txt f1.txt f4.txt f.txt
f112.txt f115.txt f12.txt f15.txt f2.txt f5.txt
f113.txt f116.txt f13.txt f16.txt f3.txt f6.txt
[root@server ~]# ls f?.txt
f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt
[root@server ~]# ls f??.txt
f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt
[root@server ~]# ls f???.txt
f111.txt f112.txt f113.txt f114.txt f115.txt f116.txt
[root@server ~]# ls f[135].txt
f1.txt f3.txt f5.txt
[root@server ~]# ls f[^135].txt
f2.txt f4.txt f6.txt
[root@server ~]# ls f[!135].txt
f2.txt f4.txt f6.txt
[root@server ~]# ls f{1,3,5}.txt
f1.txt f3.txt f5.txt
[root@server ~]# ls f{1..6}.txt
f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt
[135] 匹配1或3或5
[1-3] 匹配1或2或3
[^1-3] 匹配非1-3之外的
[!1-3] 匹配非1-3之外的
{}
{1,3,5}匹配1或2或3
{1..3} 匹配1或2或3
四、引号
1.分类:单引号:’’ 双引号:”” 反引号:`` 等价于$()
2.一般情况下,单引号和双引号引用的字符串
[root@server ~]# echo 'hello world'
hello world
[root@server ~]# echo "hello world"
hello world
3.单引号和双引号区别:
(1)单引号:所见所得
(2)双引号:引用变量值,可以包含命令结果
[root@server ~]# echo "hello $USER"
hello root
[root@server ~]# echo 'hello $USER'
hello $USER
(3)反引号:执行命令
[root@server ~]# echo 'hello `whoami`'
hello `whoami`
[root@server ~]# echo "hello `whoami`"
hello root
4.选项及作用
符号 | 作用 |
' | 单引号,输出时,将单引号内的所有内容都原样输出,称为强引用 |
" | 双引号,输出双引号内的所有内容,如果内容中有变量,特殊转义符等;会首先把变量,转义符解析出结果,然后再输出最终内容,再变成强引用 |
` | 反引号,一般用于引用命令,执行的时候会被执行,与$()作用相同 |
$() | 与 ` 作用相同 |
更多推荐
所有评论(0)