Linux常用命令整理3:cut,sort,tr,head系列,xargs

cut

参考:https://blog.csdn.net/yangshangwei/article/details/52563123

1,cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

2,如果不指定 File 参数,cut 命令将读取标准输入。

#用法1:按字节提取
cut  -b number [file]  //拆分多字节字符,可能会导致乱码
cut  -bn  number [file]  //不拆分多字节字符,字符完整了才显示,不完整不显示,-n只能和-b一起使用
#实例
cut -b 4 file //第4个字节
cut -b 1-3 file //第1-3个字节
cut -b 1,2,3 file //cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序。
cut -b -3 file //包含第3个,等价于1-3
cut -b 3- file //包含第3个,等价于3-最后
cut -b -3,3- //输出整行

#用法2:按字符提取,以字符为单位
cut -c number [file]
#实例
cut -c 4 file
cut -c 2-3 file
cut -c 1,2,3 file
cut -c -3
cut -c 3-
cut -c -3,3-

#用法3:按域提取,以分隔符划分域
cut [-d 分隔符(默认为制表符)] -f number [file] 
#注意
1,结果会以分隔符连接,不连续的时候也会有分隔符
2,只能以单字节分割,否则报错//这也是cut的缺点
#实例
cut -d: -f4 file //形参和实参之间有无空格都可以
cut -d: -f2-4
cut -d: -f-3
cut -d: -f3-
cut -d: -f-3,4-//也是整行

sort

参考:

https://blog.csdn.net/weixin_30763397/article/details/96409117(综合使用cut,sort,tr,cat等等)

https://blog.csdn.net/z1164072826/article/details/81056872

1,sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

2,如果按数值排序,比较的列如果首字符不是数字,那么就按字符顺序比较,如果列首有数字会截取到非数字字符的数值来比较。

#语法
-b 忽略每行前面开始出的空格字符
-n 依照数值的大小排序
-g  一般数值:以浮点数字类型比较字段。这个选项的运作有点类似 -n.差别仅在于这个选项的数字可能有小数点及指数
-u 意味着是唯一的(unique),输出的结果是去完重了的
-o<输出文件> 将排序后的结果存入指定的文件
-r 以相反的顺序来排序
-t 使用单个字符char作为默认的字段分割字符,默认是制表符
-k 定义排序键值字段(该选项后接一个字段编号,或则是一对数字。有时-k之后可用空白分隔。当出现多个-k选项时候,会先从第一个键值开始排序,找出匹配该键值的记录后,再进行第二个键值字段的排序,以此类推

//需要结合其他命令,格式化每行比较的列,才能发挥真正的作用

#实例
//基础排序
sort -n /etc/passwd
sort -g /etc/passwd
sort -r /etc/passwd
sort [-ngr] /etc/passwd
cut -d: -f3- /etc/passwd|sort -n
ps -ef|head -n 5|sort  -k3
//分割排序 sort -t: -k1,1 /etc/passwd 以冒号隔开的第1个字段:用户名称 对 /etc/passwd进行排序 sort -t: -k3nr /etc/passwd 以冒号隔开的第3个字段 uid 反向(由大到小)排序 sort -t: -k4n -k3n /etc/passwd 以冒号隔开的第4个字段GID,以及第3个字段uid排序 //输出 sort -r number.txt -o number.txt

tr

参考:

https://www.runoob.com/linux/linux-comm-tr.html(菜鸟教程)

https://blog.csdn.net/wisgood/article/details/17290707?utm_source=blogxgwz0

1,tr不接受指定的文件参数,而只是对标准输入进行翻译(压缩,替换,删除)。

2,凡是在字符集SET1中的字符都会被替换为字符集2中相应位置上的字符。

3,通过使用tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr所能够做的。

#语法
tr [OPTION] SET1 [SET2] 

#选项
-c:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d:删除指令字符
-s:缩减连续重复的字符成指定的单个字符
-t:削减 SET1 指定范围,使之与 SET2 设定长度相等

#实例
//cat number.txt:内容是1234567890zxcvbnm
cat number.txt|tr 'a-z' 'A-Z' //小写转大写
cat number.txt|tr '1-5' '[A*]' //1,2,3,4,5都转换为A,*会重复为SET1的长度
cat number.txt|tr '1-9' '[A*5]BCDE' //将A重复5次
cat number.txt|tr 1-5 AB //12345会转换为ABBBB,SET2比SET1少的时候,会使用SET2最后一个字符补齐对应;如果SET2更多,多余的字符无效
cat number.txt|tr -d '0-9' //删除全部数字
cat number.txt|tr -s ' 	' //将多空格和制表符转为单个
cat number.txt|tr -cd ''0-9 //删除全部非数字字符
cat number.txt|tr -cs ' 0-9' //所有非数字的重复字符压缩为一个

head

参考:

https://www.runoob.com/linux/linux-comm-head.html

1,系列命令:cat,head,more,tac,tail,less

#语法
head [OPTION] [file]
//选项
-n 显示的行数 默认10行
-c 显示的字节数
//实例
head -c 40 /etc/passwd
head -n5 /etc/passwd
//就这么简单

#其他命令
tail [OPTION] [file]
多了一个-f,循环读取
//实例
tail -c 40 /etc/passwd
tail -n5 /etc/passwd
tail -f /var/run/test.log//循环读取

cat [-nbsET] [file]
-n 显示行号
-b 对空白行不编号
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-E 每行结束显示$
-T 将 TAB 字符显示为 ^I
tac [-nbsET] [file]
//同cat,以行倒序排列
-n 显示行号
-b 对空白行不编号
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-E 每行结束显示$
-T 将 TAB 字符显示为 ^I

more [-n][+n][-s][+/pattern] file...
https://blog.csdn.net/yychuyu/article/details/89926703
-N 一次显示N行
+N 从第N行开始
-s 连续多个空行显示为1行
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示 less [
-mNs] file... -m 显示百分比 -N 显示行号 -s 连续空行显示为1行

more和less的区别:

1,more不可bai以回去,就是du不可以向前,只能向后,况且只能使用Enter和Space向后翻动。less使用j,k键盘bai可以上下翻动,还可以使用上下箭头。

2,less不必读整个文件,加载速度会比more更快。

3,less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容。

xargs

exec

lsof

参考1: https://www.cnblogs.com/sparkdev/p/10271351.html

参考2:https://blog.csdn.net/yr137157/article/details/87112312

原文地址:https://www.cnblogs.com/tkzc2013/p/13845084.html