Linux常用命令整理3:cut,sort,tr,head系列,xargs,curl
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 ' \t' //将多空格和制表符转为单个 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不可以回去,就是不可以向前,只能向后,况且只能使用Enter和Space向后翻动。less使用j,k键盘bai可以上下翻动,还可以使用上下箭头。
2,less不必读整个文件,加载速度会比more更快。
3,less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容。
xargs
参考:
https://www.runoob.com/linux/linux-comm-xargs.html(菜鸟教程xargs命令)
https://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html(阮一峰xargs命令)
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令
find /sbin -perm +700 |ls -l #这个命令是错误的 find /sbin -perm +700 |xargs ls -l #这样才是正确的 cat test.txt | xargs -n3 echo "nameXnameXnameXname" | xargs -dX -n2 ls *.jpg | xargs -n1 -I {} cp {} /data/images
curl
参考:
https://www.jb51.net/article/118402.htm
https://www.jianshu.com/p/2e492632c191
curl http://www.baidu.com/ curl -I url #显示 HTTP 头,而不显示文件内容 curl -i url #同时显示http头和内容 curl url > filename #下载url地址资源,路径资源必须存在,否则失败 curl -o filename url #下载url地址资源保存为filename curl -L url 跟随连接重定向 curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com #自定义header curl -A/--user-agent #-H能实现 curl -e/--referer #-H能实现 curl -b/--cookie #-H能实现 curl -c ckfilename url #可以保存cookie curl -X method url #指定请求类型:GET,POST,OPTION,DELETE... curl -d "userName=tom&passwd=123456" url #post请求,并且带上data数据 curl -T/--upload-file filename #上传文件