Copycat 查看文件内容more 以翻页形式查看文件内容(只能向下翻页)less 以翻页形式查看文件内容(可以高下翻页)head 查看文件的头几行(默认10行)tail 查看文件的尾几行(默认10行)
示例:
1、查看前10行
Copy$ head -n 10 test.log
2、跟踪查看末了100行

Copy$ tail -f -n 100 test.log
wc
命令 wc 用于统计文件的行数、单词数、字符数等。
不带参数时默认输出一行,字段格式为:
Copy行数 单词数 字符数 文件名
常用参数:
Copy-l 只统计行数-w 只统计单词数-c 只统计字节数-m 只统计字符数-L 最长的一行包含了多少个字符
grep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能利用正则表达式搜索文本,并把匹配的行打印出来。常用来在结果中搜索特定的内容。
一样平常格式:
Copy grep [选项] 基本正则表达式 [文件]
选项
Copy -c 只输出匹配行的计数 -i 不区分大小写(单字符) -h 不显示文件名(多文件时) -l 只输出文件名(多文件时) -n 显示匹配行及行号 -s 不显示缺点信息 -v 显示不包含匹配文本的所有行 -r 递归在子目录里文件查找 --color=auto 自动高亮找到的关键词
示例
1) 将/etc/passwd,有涌现 root 的行取出来:
Copy$ grep 'root' /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin# 或者$ cat /etc/passwd | grep 'root'
2)将/etc/passwd,有涌现 root 的行取出来,同时显示这些行在/etc/passwd的行号:
Copy$ grep -n root /etc/passwd1:root:x:0:0:root:/root:/bin/bash30:operator:x:11:0:operator:/root:/sbin/nologin
3)将/etc/passwd,将没有涌现 root 的行取出来
Copy$ grep -v root /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
4)将/etc/passwd,将没有涌现 root 和nologin的行取出来
Copy$ grep -v root /etc/passwd | grep -v nologinroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
5) 查找nginx是否运行:
Copy$ ps aux | grep nginxwww 1576 0.0 2.7 71652 28232 ? S Aug14 0:21 nginx: worker process
根据文件内容递归查找目录
6)在当前目录里文件查找字符串'math'
Copy$ grep 'math' grep: my: Is a directorygrep: my1: Is a directorys.txt:lisi 1989 male math 99s.txt:wangxuebing 1978 male math 89s.txt:lichang 1989 male math 99
7)在当前目录及其子目录下搜索'math'行的文件
Copy$ grep -r 'math'
8)当前目录及其子目录下搜索'math'行的文件,但是不显示匹配的行,只显示匹配的文件
Copy$ grep -l -r 'math' s.txt
显示行号:
Copy$ grep -nr 'swoole' --color=auto /work/www/mixphp/
正则表达式
支持正则语法,单引号里面写正则。
正则示例:
Copy't[ae]st' #查找test或者tast'[^g]oo' #字符串不含有g。把稳中括号里是不包含,不因此其开头'[^a-z]oo' #字符串前不包含a-z小写字母'[0-9]' #包含数字0-9'^the' #匹配字母t开始的字符'the$' #匹配字母e结尾的字符
示例:
Copy$ grep '^xu' s.txt xuliang 1977 male economic 89xuxin 1986 female english 99
更多的正则知识请查看正则表达式干系知识。
扩展grep(grep -E 或者 egrep)
利用扩展grep的紧张好处是增加了额外的正则表达式元字符集。
示例:
查找包含1990和1989的行:
Copy$ grep -E '1990|1989' s.txt lisi 1989 male math 99wanglijiang 1990 female chinese 78lichang 1989 male math 99wanglijiang 1990 female chinese 78lisibao 1989 male math 99xiaobao 1990 female chinese 78
awk
awk简介
awk是一个强大的文本分析工具,相对付grep的查找,sed的编辑,awk在其对数据剖析并天生报告时,显得尤为强大。大略来说awk便是把文件(或其他办法的输入流, 如重定向输入)逐行的读入(看作一个记录集), 把每一行看作一条记录,以空格(或\t,或用户自己指定的分隔符)为默认分隔符将每行切片(类似字段),切开的部分再进行各种剖析处理。
awk有3个不同版本: awk、nawk和gawk,未作特殊解释,一样平常指gawk,gawk 是 AWK 的 GNU 版本。
Awk基本语法:
Copyawk 'pattern1 {command1;command 2…; command 3} pattern2 { command …}'
pattern表示用来过滤记录的模式,可是是正则表达式,关系运算表达式,也可以什么也没有(表示选中所有记录)。
每个pattern选中的行记录会被花括号括起来的命令command操作一遍, command之间用;分割。 花括号里面可以什么也没有, 则默认为print输出整行记录。 Comamnd可以是输出, 可以是算术运算,逻辑运算,循环掌握等等。
示例
s.txt
Copyzhangsan 1977 male computer 83lisi 1989 male math 99wanglijiang 1990 female chinese 78xuliang 1977 male economic 89xuxin 1986 female english 99wangxuebing 1978 male math 89lichang 1989 male math 99wanglijiang 1990 female chinese 78zhangsansan 1977 male computer 83 langxuebing 1978 male math 89lisibao 1989 male math 99xiaobao 1990 female chinese 78
一行中的5个字段分别表示姓名, 出生年, 性别,科目,分数, 是一个很传统很范例的报表文件。
现在演示awk是如何查找的:
1)直接输出1990年出生的同学:
Copy$ awk '/1990/' s.txtwanglijiang 1990 female chinese 78wanglijiang 1990 female chinese 78xiaobao 1990 female chinese 78
或者:
Copy$ awk '/1990/{print $0}' s.txt
awk默认把输入的内容以空格拆分出每列。$0表示匹配所有列,print $0将输出所有列,每列分隔符是空格。
2)对chinese的课程的行输出\"大众语文\"大众:
Copy$ awk '/chinese/{print \"大众语文\"大众}' s.txt语文语文语文
3)记录的头部和结尾加上一段解释:
Copy$ awk 'BEGIN{print \"大众Result of the quiz:\n\公众}{print $0}END{print \"大众------\公众}' s.txtResult of the quiz:zhangsan 1977 male computer 83lisi 1989 male math 99wanglijiang 1990 female chinese 78xuliang 1977 male economic 89xuxin 1986 female english 99wangxuebing 1978 male math 89lichang 1989 male math 99wanglijiang 1990 female chinese 78zhangsansan 1977 male computer 83langxuebing 1978 male math 89lisibao 1989 male math 99xiaobao 1990 female chinese 78------
AWK事情流程:逐行扫描文件,从第一行到末了一行,探求匹配特定模式的行,并在这些行上进行用户想要到的操作。
BEGIN只会在最开始实行;END只会在扫描所有行数之后实行。BEGIN和END之间的花括号的内容每扫描一行都会实行。
4)查找女生的成绩且只输出姓名、学科、成绩:
Copy$ awk '$3==\"大众female\"大众{print $1,$4,$5}' s.txtwanglijiang chinese 78xuxin english 99wanglijiang chinese 78xiaobao chinese 78
$1表示第1列,$n类推。这里条件是表达式,而不是正则。print里,表示空格分隔符。
5)找出1990年出生的学生姓名,并哀求匹配正则:
Copy$ awk '$2~/1990/{print $1}' s.txtwanglijiangwanglijiangxiaobao
这里~表示匹配正则表达式。!~表示不匹配正则表达式。
如果须要多选,则改成:
Copy$ awk '$2~/(1990|1991)/{print $1}' s.txt
6)找出大于1985年出生的学生姓名,年事,利用表达式:
Copy$ awk '$2>\"大众1985\"大众{print $1,$2}' s.txtlisi 1989wanglijiang 1990xuxin 1986lichang 1989wanglijiang 1990lisibao 1989xiaobao 1990
awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
CopyARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持行列步队中系统环境变量的利用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入列分隔符,等价于 -F选项。默认是空格OFS 输出列分隔符。默认是空格NF 列的字段总数,$NF指当前列末了一个的值NR 已读的记录数(当前行数)ORS 行输出分隔符,默认为\nRS 行输入分隔符,默认分隔符为\nRT 指定的那个分隔符$0 指整条记录$1, $2, … $n 分别是第1,2,...n列的字段值
示例:
6)第四个字段科目为chinese的记录编号, 学生姓名, 科目:
Copy$ awk '$4==\"大众chinese\"大众{print NR, $1, $4, $5}' s.txt3 wanglijiang chinese 788 wanglijiang chinese 7812 xiaobao chinese 78
7)统计数学成绩大于90的个数:
Copy$ awk 'BEGIN{goodMath=0;}($4==\公众math\"大众 && $5>90){goodMath++}END{print goodMath}' s.txt3
8)改换输入换行符
Copyecho \"大众11 22|12 23\"大众 | awk 'BEGIN{RS=\"大众|\"大众}{print $0}'
等价于:
Copyecho \"大众11 22|12 23\"大众 | awk -v RS='|' '{print $0}'
输出:
Copy11 2212 23
注:文本内容(例如\"大众11 22\n12 23\"大众)里的\n不是换行符,实际是\\n。shell里字符串的\n要生效,须要利用echo -e。示例:echo -e \公众11 22\n12 23\"大众 | awk '{print $0}' 。
9)改换列输入、输出分隔符:
Copy$ cat /etc/passwd |awk -F ':' -v OFS='\t' '{print $1}' rootdaemonbinsys
-F指定输入域分隔符为:。-F等价于-v FS。
-v OFS指定输出域分隔符为\t。
注:-F和-v OFS在处理MySQL数据导出导入时有非常大的浸染:我们可以利用-F指定每列因此\t或者,(csv格式)分隔的;输出的时候我们可以用-v OFS指定每列分隔符,默认的空格常常不敷以方便利用。如果利用了-v OFS,利用print $0是改变不了输出分隔符的,须要手动指定列,例如print $1,$2。
10)批量操作
Copy# docker里关闭所有正在运行容器docker ps | awk '{print $1}' | xargs docker stop# docker里删除所有容器运用docker ps -a | awk '{print $1}' | xargs docker rm
11)文件切割
Copyawk '{filename = \"大众sub.\"大众 int((NR-1)/5000) \公众.csv\"大众; print >> filename}' history.csv
每5W行切割为一个文件。
12)分组合并
例如test.txt文本内容是:
Copyyjc 1 20170118yjc 1 20170118lisi 1 20170223
须要整理成(姓名、日期相同的计数累加):
Copyyjc 2 20170118lisi 1 20170223
脚本:
Copycat test.txt | awk '{a[$1$3][\公众c\"大众]+=$2;a[$1$3][\公众u\"大众]=$1;a[$1$3][\公众d\公众]=$3;}END{for(i in a)print a[i][\"大众u\公众],a[i][\"大众c\"大众],a[i][\"大众d\公众]}'
awk函数
awk还支持内置函数。这里只列举部分。
Copyint(x) 返回 x 的截断至整数的值rand() 返回任意数字 n,个中 0 <= n < 1。sqrt(x) 返回 x 平方根。sub(Ere, Repl, [In]) 字符串更换gsub(Ere, Repl, [In]) 正则更换index(str, str2) str2在str中涌现的位置,从1开始编号。不存在返回0substr(str, M, [N]) 返回具有N参数指定的字符数量子串。如果未指定 N 参数,则子串的长度将是M参数指定的位置到str参数的末端的长度。length [(str)] 返回 str 参数指定的字符串的长度(字符形式)。如果未给出 str 参数,则返回全体记录的长度($0 记录变量)。match(str, Ere) 返回Ere匹配的字符串在str中涌现的位置,从1开始编号。不匹配返回 -1tolower(str) 字符串转小写toupper(str) 字符串转大写split(str, A, [Ere] ) 将str参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回n变量的值。分隔符由正则表达式Ere匹配得出。mktime(YYYY MM DD HH MM SS[DST]) 根据日期天生韶光戳。失落败返回-1 strftime([format [, timestamp]]) 格式化韶光输出,将韶光戳转为韶光字符串systime() 得到韶光戳
13) int函数
Copy$ echo \公众10.22元\"大众 | awk '{$1=int($1);print $1}'10
如果只是想转换为数字,可以利用乘法运算:
Copy$ echo \"大众10.22元\"大众 | awk '{$1=$11;print $1}'10.22
14) 数学函数
Copy$ echo 9 | awk '{$1=sqrt($1);print $1}'3
15) 字符串函数
Copy$ awk 'BEGIN{info=\"大众test2010test\公众;gsub(\"大众2010\"大众,\"大众 \"大众,info);print info}'test test$ awk 'BEGIN{info=\公众test2010test\公众;gsub(/[0-9]+/,\"大众 \公众,info);print info}'test test$ awk 'BEGIN{info=\公众test2010test\"大众;print index(info, 2010);}'5$ awk 'BEGIN{info=\公众test2010test\公众;print substr(info, 5);}'2010test$ awk 'BEGIN{info=\"大众test2010test\公众;print length(info);}'12$ awk 'BEGIN{info=\"大众test2010test\公众;print toupper(info);}'TEST2010TEST$ awk 'BEGIN{info=\"大众test2010test\"大众;print match(info, /[0-9]+/);}'5$ echo \公众10:20\"大众 | awk '{split($1,arr,\"大众:\"大众);print arr[1];print arr[1];print arr[1]60+arr[2];}'1010620$ awk 'BEGIN{info=\"大众hello shell\"大众;split(info,arr,\公众 \"大众);print length(arr);for(k in arr){print k,arr[k];}}'21 hello2 shell
awk for …in 循环,是一个无序的循环。 并不是从数组下标1…n ,因此利用时候须要把稳。split天生的数组下标从1开始。
16) 韶光戳函数
Copy$ awk 'BEGIN{print systime();}'1543668202$ awk 'BEGIN{print strftime(\"大众%Y-%m-%d %H:%M:%S\公众,1543668202);}'2018-12-01 20:43:22$ awk 'BEGIN{print mktime(\"大众2018 12 01 20 43 22\公众);}'1543668202$ awk 'BEGIN{$1=\"大众2018-12-20\公众;gsub(/[-:]/,\公众 \"大众,$1);print mktime($1.\公众 20 43 22\"大众);}'1545309802
printf格式化
格式和C措辞的一样。支持%d %s %u %f %c %o %x等。
格式符解释%d十进制有符号整数%u十进制无符号整数%f浮点数%s字符串%c单个字符%p指针的值%e指数形式的浮点数%x%X 无符号以十六进制表示的整数%o无符号以八进制表示的整数%g自动选择得当的表示法
Copy$ awk 'BEGIN{x=12.12; printf(\"大众%.2f,%.2u,%d,%s,%o\n\"大众,x,x,x,x,x);}'12.12,12,12,12.12,14
其它详见:https://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
17) if...else
if后面的条件判断须要利用括号括起来。支持 ==, >, <, >=, <= 等判断。
示例: 将下列文件格式转换为新的格式:
原格式:route.csv
Copy//测试'/api/user/info' => 'User::getUserInfo','/api/user/info_batch' => 'User::getUserInfoBatch', //批量获取
新格式:route2.csv
Copy//测试'/api/user/info' => [\公众route\公众 => 'User::getUserInfo', \公众tag\"大众 => 'user'],'/api/user/info_batch' => [\"大众route\公众 => 'User::getUserInfoBatch', \公众tag\"大众 => 'user'], //批量获取
脚本:
Copycat route.csv | awk -F '=>' -v OFS='\t' '{print $1,$2}' | awk -F ',' -v OFS='\t' '{print $1,$2}' | awk -F '\t' '{if($2>\"大众\"大众) print $1, \公众 => [ \\公众route\\"大众 => \"大众$2\"大众, \\公众tag\\"大众 => \公众user\"大众 ], \公众$3; else print $1 }' >> route2.csv
sed
和grep、awk不同,sed更侧重对搜索文本的处理,如修正、删除、更换等等。
sed事情事理:sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为\公众模式空间\公众,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末端。文件内容并没有改变,除非你利用重定向存储输出。
语法
Copysed [options] 'command' file(s)sed [options] -f scriptfile file(s)
参数解释:
Copy-n, --quiet, --silent 安静模式,也便是不会输出默认打印信息-e 将编辑的结果返回到标准输出-i 直接编辑文件而不是显示在屏幕上-f <script文件>, --file=<script文件> 以选项中指定的script文件来处理输入的文本文件。-h, --help 显示帮助。-V, --version 显示版本信息。
动作解释:
Copya 表示在指定行下边插入指定行的内容。i 命令i和a利用上基本上一样,只不过是在指定行上边插入指定行的内容。d 表示删除指定的行内容c c是表示把指定的行内容更换为自己须要的行内容。把稳是整行更换y 字符更换,可以更换多个字符,只能更换字符不能更换字符串,且不支持正则表达式s 字符串更换,这天常平常sed利用的最多的子命令。支持正则表达式r 类似于a,也是将内容追加到指定行的后边,只不过r是将指定文件内容读取并追加到指定行下边。
sed命令必须跟一个动作。
新建文件t.txt:
Copyzhangsan 1977 male computer 83lisi 1989 male math 99wanglijiang 1990 female chinese 78
1)新增一行:第3行后新增:
Copy$ sed -e '3a newline'zhangsan 1977 male computer 83lisi 1989 male math 99wanglijiang 1990 female chinese 78newline
2)插入一行:第3行前插入:
Copy$ sed -e '3i newline'zhangsan 1977 male computer 83lisi 1989 male math 99newlinewanglijiang 1990 female chinese 78
3)删除一行:删除第3行:
Copy$ sed -e '3d'zhangsan 1977 male computer 83lisi 1989 male math 99
4)更换一行:
Copy$ sed -e '3c newline'zhangsan 1977 male computer 83lisi 1989 male math 99newline
5)行内部分内容的更换:
格式:
Copysed 's/要被取代的字串/新的字串/g'
示例:
Copy$ sed '3s/1990/2000/g' t.log zhangsan 1977 male computer 83lisi 1989 male math 99wanglijiang 2000 female chinese 78
一些更换规则范例:
Copys/\t/\公众,\公众/g; \t换成\"大众,\"大众s/^/\公众/; 开头加上\"大众s/$/\"大众/;s/\n//g 末端加上\公众s/\公众//g; 引号去掉 s/,/ /g 逗号换成空格s/,/\n/g 逗号换成空行s/[NULL]//g; NULL换成空缺s/[,,]/\n/g 中英文逗号换成空行
6)多行操作:
Copy$ sed '2,3d' t.log #删除2,3行$ sed '2,$d' t.log #从第2行开始删除到末端$ sed '2,3a test' t.log #分别在第2行,第3行增加字符\"大众test\公众
7)r命令
Copysed '2r t.log' message
将a.txt文件内容读取并插入到t1.log文件第2行的下边。
把稳:
1、上述的操作均只在输出缓冲里操作,文件并没有变革;须要直接修正文件,前面加-i参数;
2、-e参数可以没有。
xargs
之以是能用到这个命令,关键是由于很多命令不支持|管道来通报参数,而日常事情中有有这个必要,以是就有了xargs命令,例如:
Copyfind /sbin -perm +700 | ls -l #这个命令是缺点的find /sbin -perm +700 | xargs ls -l #这样才是精确的
sort
排序,默认按照字符升序排序。
Copy-r, --reverse 逆向(倒序)排序-n, --numeric-sort 基于数字排序-d, --dictionary-order 字典序-h, --human-numeric-sort 按照人类可识别的顺序,例如(1G>1M>1K)-f, --ignore-case 忽略大小写-u, --unique 去重复(剔除重复行)-t, --field-separator=SEP 指定分隔符(一样平常合营-k参数利用,纯挚分割毫无意义)-k, --key=POS1[,POS2] 当指定分割符时,按照第n个字段进行排序(序号n从1开始)
以下面的内容为例:
Copy$ cat 1.txt45645612311345678456
按字符降序:
Copysort -r 1.txt 56784564564563412311
按数值降序:
Copy# sort -rn 1.txt 56784564564561233411
去除重复行:
Copy$ sort -nu 1.txt 11341234565678
-h这个一样平常可以用来排序文件大小:
Copy$ du -h2.0G ./test24.0K ./test3316M ./test2.3G .$ du -h |sort -hr2.3G .2.0G ./test2316M ./test4.0K ./test3
-t,-k适用于多列的情形:
Copy$ cat 2.txtbaidu,100,5000google,110,5000sohu,100,4500guge,50,3000
分别表示公司、员工数、最低人为。
我们先按照员工数升序,如果员工数相同,按照最低人为升序:
Copy$ sort -n -t ',' -k 2 -k 3 2.txt guge,50,3000sohu,100,4500baidu,100,5000google,110,5000
按照员工人为降序排序,如果员工人数相同的,则按照公司人数升序排序:
Copy# sort -t ',' -k 3nr -k 2n 2.txt baidu,100,5000google,110,5000sohu,100,4500guge,50,3000
uniq
用于去重,须要先实行sort。
Copy-c: 显示文件中行重复的次数-d: 只显示重复的行(相邻的行)-D: 把所有重复的行都显示出来(相邻的行)
示例:
Copy# 排序后去重$ sort 1.txt |uniq11123344565678# 显示重复次数$ sort 1.txt | uniq -c 1 11 1 123 1 34 3 456 1 5678# 仅显示重复的内容$ sort 1.txt | uniq -d456# 显示所有重复的行内容$ sort 1.txt | uniq -D456456456
注:uniq仅针对换行符是\n,对付windows下编写的文件如果换行符是\r\n则无法排序。
cut
cut 命令和awk功能有些类似,用于列的选取。cut 以行为单位,用指定分隔符将行切分为多少字段,选取所须要的字段。
格式:
Copycut OPTION... [FILE]...
参数:
Copy-d:用来定义分隔符,默认为tab键-f :以 -d 定义的分隔符选取列,下标从1开始-c:以字符为单位进行分割,选取列的字符-c:以字节为单位进行分割,选取列的字节-s:表示不包括那些不含分隔符的行,用于去掉注释或者标题一类的信息
个中-f、-c、-b选取范围参数含义:
CopyN:只取第N项M,N:只取第M项和N项N-:从第N项一贯到行尾N-M:从第N项到第M项(包括M项)-M:从第一项到第M项(包括M项)-:从第一项开始到结束的所有项
例1:按指定分隔符选取列
Copy$ echo \"大众1,2,3,4,5\"大众 | cut -d , -f2-42,3,4$ echo \"大众1,2,3,4,5\"大众 | cut -d , -f2,32,3$ echo \"大众1,2,3,4,5\"大众 | cut -d , -f2-2,3,4,5
例2:按指定字符选取列
Copy$ echo \"大众hello world\公众 | cut -c2-4ell$ echo \公众hello world\"大众 | cut -c2,3el$ echo \"大众hello world\"大众 | cut -c2-ello world
split
split命令用于将一个文件分割成多个。格式:
Copysplit [OPTION]... [INPUT [PREFIX]]
参数:
Copy-l : 指定每多少行切成一个小文件。个中-l可以省略,仅写后面的数字。-b:指定每多少字节切成一个小文件-C:与参数\"大众-b\"大众相似,但是在切割时将只管即便坚持每行的完全性-d:默认切割后的文件后缀是aa,ab,ac...结尾的,利用该选项后会以00,01,02...结尾-a:指定后缀长度,默认的后缀长度是 2,也便是按 aa、ab、ac 这样的格式依次编号[PREFIX] :设置切割后文件的文件名前缀,默认是x
示例:
Copy$ wc -l access_test.log 528 access_test.log$ split -l 200 access_test.log access_test_ -d$ ls accessaccess_test_00 access_test_01 access_test_02 access_test.log$ wc -l access_test 200 access_test_00 200 access_test_01 128 access_test_02 528 access_test.log 1056 total$ split -b 20k access_test.log access_byte -d -a 3$ ls access_byteaccess_byte000 access_byte001 access_byte002 access_byte003 access_byte004$ du -h access_byte20K access_byte00020K access_byte00120K access_byte00220K access_byte00312K access_byte004
paste
paste 用于把两个文件的内容按列合并一起,而不是大略在文件后面追加。类似于 MySQL里的左联查询多个表的结果。
格式:
Copypaste [OPTION]... [FILE]...
参数:
Copy-d 拼接时利用指定符号隔开各个文件的内容-s 将所有换行删掉
示例1:
Copy$ cat a.txt 123$ cat b.txt abc$ paste -d ':' a.txt b.txt 1:a2:b3:c
示例2:
Copy$ paste -s -d ',' a.txt1,2,3$ echo -e \"大众1\n2\n3\"大众 | paste -s -d ',' 1,2,3
jq
jq 命令是用来处理json文本的。
须要先安装:
Copyyum install -y jq
官网示例:https://stedolan.github.io/jq/tutorial/
示例:
Copy$ cat jq.json { \"大众name\公众: \公众Json\"大众, \"大众page\"大众: 88, \公众address\"大众: { \"大众street\"大众: \"大众科技园路.\"大众, \"大众city\"大众: \"大众江苏苏州\"大众 }, \"大众links\"大众: [ { \"大众name\"大众: \"大众Google\"大众, \"大众url\"大众: \"大众http://www.google.com\"大众 }, { \公众name\"大众: \公众Baidu\"大众, \"大众url\"大众: \"大众http://www.baidu.com\"大众 } ]}$ cat jq.json | jq .name\"大众Json\公众$ cat jq.json | jq '.links' | jq '.[] | .name'\"大众Google\"大众\"大众Baidu\"大众$ cat jq.json | jq '.links' | jq '[.[] | .name ]'[ \公众Google\"大众, \"大众Baidu\"大众]$ cat jq.json | jq '.links' | jq .[0].name\"大众Google\公众
scp
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨做事器,而且scp传输是加密的。
格式:
Copyscp [参数] [原路径] [目标路径]
示例:
Copy# 远程复制到本地scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/# 本地复制到远程scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/
命令参数:
Copy-1 逼迫scp命令利用协议ssh1 -2 逼迫scp命令利用协议ssh2 -4 逼迫scp命令只利用IPv4寻址 -6 逼迫scp命令只利用IPv6寻址 -B 利用批处理模式(传输过程中不讯问传输口令或短语) -C 许可压缩。(将-C标志通报给ssh,从而打开压缩功能) -p 保留原文件的修正韶光,访问韶光和访问权限。 -q 不显示传输进度条。 -r 递归复制全体目录。 -v 详细办法显示输出。scp和ssh(1)会显示出全体过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher 以cipher将数据传输进行加密,这个选项将直接通报给ssh。 -F ssh_config 指定一个替代的ssh配置文件,此参数直接通报给ssh。 -i identity_file 从指定文件中读取传输时利用的密钥文件,此参数直接通报给ssh。 -l limit 限定用户所能利用的带宽,以Kbit/s为单位。 -o ssh_option 如果习气于利用ssh_config(5)中的参数通报办法, -P port 把稳是大写的P, port是指天命据传输用到的端口号 -S program 指定加密传输时所利用的程序。此程序必须能够理解ssh(1)的选项。
rsync
rsync(remote sync) 是用于同步某一位置文件和目录到另一位置的有效方法。备份的位置可以在本地做事器或远程做事器。
Copyrsync [OPTION]... SRC [SRC]... DEST
示例:
将Jenkins编译天生的文件同步到远程做事器,打消git目录:
Copyrsync -azP --exclude .git /var/lib/jenkins/workspace/myapi/output/ root@172.17.17.10:/alidata/myapi/
参数:
Copy-a --参数,相称于-rlptgoD ,同步软链接,同步权限, 同步韶光戳,同步属主和属组-r --是递归 -l --是链接文件,意思是拷贝链接文件-i --列出 rsync 做事器中的文件-p --表示保持文件原有权限-t --保持文件原有韶光 -g --保持文件原有用户组 -o --保持文件原有属主 -D --相称于块设备文件 -z --传输时压缩-P --传输进度 -v --传输时的进度等信息,和-P有点关系
与scp的差异:
1、对付scp来说,除了在机器之间和一个机器目录之间进行数据同步之外,还可以在两台不同机器之间进行数据同步。比如你在A机器,可以对B、C两台机器上的数据进行同步,但是rsync就不可以;也便是说当rsync进行跨机器同步数据的时候只可以在本机与其余一台机器之间进行数据的同步。
2、rsync是为了在两个机器之间进行数据的同步,既然有了scp为何还要有这个协议呢?该协议紧张目的是在两台机器之间进行数据同步的时候,只管即便少的通报数据。rsync可以聪明的在两台机器之间进行数据的同步,并通过得当的差分编码减少数据的传输。rsync的浸染便是当要同步数据的对端已经存在部分要同步数据的情形下,通过利用rsync可以只通报对端没有的数据。假设一个文件100G,在文件末端只加了一个句号。这时候要同步数据,如果利用scp那么要拷贝传输100G数据过去,而rsync只传输修正后的数据,全体任务就结束了。
参考
1、linux awk命令详解 - ggjucheng - 博客园
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
2、sed入门详解教程 - 肖邦linux - 博客园
https://www.cnblogs.com/liwei0526vip/p/5644163.html
3、Linux 入门记录:十七、Linux 命令行文本/文件处理工具 - mingc - 博客园
https://www.cnblogs.com/mingc/p/7616206.html
4、linux sort 命令详解 - 孙愚 - 博客园
https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html
5、OFS-输出字段分隔符 | awk
https://lvs071103.gitbooks.io/awk/content/awk_syntax_and_basic_commands/ofs-.html
6、Awk关系运算符和布尔运算符 - 自由的代价永久是当心 - CSDN博客
https://blog.csdn.net/liu454638324/article/details/41578031
7、linux awk 内置函数详细先容(实例) - 程默 - 博客园
https://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
8、rsync 利用示例 | 《Linux就该这么学》
https://www.linuxprobe.com/rsync-use-sample.html
9、Linux之rsync数据同步做事 - 潇潇、寒 - 博客园
http://www.cnblogs.com/caicairui/p/8461216.html
10、【Linux】Linux下同步数据scp与rsync - zwan0518的专栏 - CSDN博客
https://blog.csdn.net/zwan0518/article/details/45695939
11、每天一个linux命令(60):scp命令 - peida - 博客园
http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html
本文首发于"大众年夜众号\公众飞鸿影的博客(fhyblog)\公众,欢迎关注。博客地址:https://52fhy.cnblogs.com
(本文完)
版权申明:没有标明转载或分外申明均为作者原创。本文采取以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处。