cat 查看文件內容 more 以翻頁形式查看文件內容(只能向下翻頁) less 以翻頁形式查看文件內容(能夠上下翻頁) head 查看文件的頭幾行(默認10行) tail 查看文件的尾幾行(默認10行)
示例:
一、查看前10行php
$ head -n 10 test.log
二、跟蹤查看最後100行html
$ tail -f -n 100 test.log
命令 wc
用於統計文件的行數、單詞數、字符數等。linux
不帶參數時默認輸出一行,字段格式爲:nginx
行數 單詞數 字符數 文件名
經常使用參數:git
-l 只統計行數 -w 只統計單詞數 -c 只統計字節數 -m 只統計字符數 -L 最長的一行包含了多少個字符
grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。經常使用來在結果中搜索特定的內容。正則表達式
通常格式:docker
grep [選項] 基本正則表達式 [文件]
-c 只輸出匹配行的計數 -i 不區分大小寫(單字符) -h 不顯示文件名(多文件時) -l 只輸出文件名(多文件時) -n 顯示匹配行及行號 -s 不顯示錯誤信息 -v 顯示不包含匹配文本的全部行 -r 遞歸在子目錄裏文件查找 --color=auto 自動高亮找到的關鍵詞
示例
1) 將/etc/passwd,有出現 root 的行取出來:shell
$ grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin # 或者 $ cat /etc/passwd | grep 'root'
2)將/etc/passwd,有出現 root 的行取出來,同時顯示這些行在/etc/passwd的行號:express
$ grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 30:operator:x:11:0:operator:/root:/sbin/nologin
3)將/etc/passwd,將沒有出現 root 的行取出來windows
$ grep -v root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
4)將/etc/passwd,將沒有出現 root 和nologin的行取出來
$ grep -v root /etc/passwd | grep -v nologin root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
5) 查找nginx是否運行:
$ ps aux | grep nginx www 1576 0.0 2.7 71652 28232 ? S Aug14 0:21 nginx: worker process
6)在當前目錄裏文件查找字符串'math'
$ grep 'math' * grep: my: Is a directory grep: my1: Is a directory s.txt:lisi 1989 male math 99 s.txt:wangxuebing 1978 male math 89 s.txt:lichang 1989 male math 99
7)在當前目錄及其子目錄下搜索'math'行的文件
$ grep -r 'math' *
8)當前目錄及其子目錄下搜索'math'行的文件,可是不顯示匹配的行,只顯示匹配的文件
$ grep -l -r 'math' * s.txt
顯示行號:
$ grep -nr 'swoole' --color=auto /work/www/mixphp/*
支持正則語法,單引號裏面寫正則。
正則示例:
't[ae]st' #查找test或者tast '[^g]oo' #字符串不含有g。注意中括號裏是不包含,不是以其開頭 '[^a-z]oo' #字符串前不包含a-z小寫字母 '[0-9]' #包含數字0-9 '^the' #匹配字母t開始的字符 'the$' #匹配字母e結尾的字符
示例:
$ grep '^xu' s.txt xuliang 1977 male economic 89 xuxin 1986 female english 99
更多的正則知識請查看正則表達式相關知識。
使用擴展grep的主要好處是增長了額外的正則表達式元字符集。
示例:
查找包含1990和1989的行:
$ grep -E '1990|1989' s.txt lisi 1989 male math 99 wanglijiang 1990 female chinese 78 lichang 1989 male math 99 wanglijiang 1990 female chinese 78 lisibao 1989 male math 99 xiaobao 1990 female chinese 78
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤其強大。簡單來講awk就是把文件(或其餘方式的輸入流, 如重定向輸入)逐行的讀入(看做一個記錄集), 把每一行看做一條記錄,以空格(或t,或用戶本身指定的分隔符)爲默認分隔符將每行切片(相似字段),切開的部分再進行各類分析處理。
awk有3個不一樣版本: awk、nawk和gawk,未做特別說明,通常指gawk,gawk 是 AWK 的 GNU 版本。
Awk基本語法:
awk 'pattern1 {command1;command 2…; command 3} pattern2 { command …}'
pattern表示用來過濾記錄的模式,但是是正則表達式,關係運算表達式,也能夠什麼也沒有(表示選中全部記錄)。
每一個pattern選中的行記錄會被花括號括起來的命令command操做一遍, command之間用;
分割。 花括號裏面能夠什麼也沒有, 則默認爲print輸出整行記錄。 Comamnd能夠是輸出, 能夠是算術運算,邏輯運算,循環控制等等。
s.txt
zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 1990 female chinese 78 xuliang 1977 male economic 89 xuxin 1986 female english 99 wangxuebing 1978 male math 89 lichang 1989 male math 99 wanglijiang 1990 female chinese 78 zhangsansan 1977 male computer 83 langxuebing 1978 male math 89 lisibao 1989 male math 99 xiaobao 1990 female chinese 78
一行中的5個字段分別表示姓名, 出生年, 性別,科目,分數
, 是一個很傳統很典型的報表文件。
如今演示awk是如何查找的:
1)直接輸出1990年出生的同窗:
$ awk '/1990/' s.txt wanglijiang 1990 female chinese 78 wanglijiang 1990 female chinese 78 xiaobao 1990 female chinese 78
或者:
$ awk '/1990/{print $0}' s.txt
awk默認把輸入的內容以空格拆分出每列。$0
表示匹配全部列,print $0
將輸出全部列,每列分隔符是空格。
2)對chinese的課程的行輸出"語文":
$ awk '/chinese/{print "語文"}' s.txt 語文 語文 語文
3)記錄的頭部和結尾加上一段說明:
$ awk 'BEGIN{print "Result of the quiz:\n"}{print $0}END{print "------"}' s.txt Result of the quiz: zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 1990 female chinese 78 xuliang 1977 male economic 89 xuxin 1986 female english 99 wangxuebing 1978 male math 89 lichang 1989 male math 99 wanglijiang 1990 female chinese 78 zhangsansan 1977 male computer 83 langxuebing 1978 male math 89 lisibao 1989 male math 99 xiaobao 1990 female chinese 78 ------
AWK工做流程:逐行掃描文件,從第一行到最後一行,尋找匹配特定模式的行,並在這些行上進行用戶想要到的操做。
BEGIN只會在最開始執行;END只會在掃描全部行數以後執行。BEGIN和END之間的花括號的內容每掃描一行都會執行。
4)查找女生的成績且只輸出姓名、學科、成績:
$ awk '$3=="female"{print $1,$4,$5}' s.txt wanglijiang chinese 78 xuxin english 99 wanglijiang chinese 78 xiaobao chinese 78
$1
表示第1列,$n
類推。這裏條件是表達式,而不是正則。print裏,
表示空格分隔符。
5)找出1990年出生的學生姓名,並要求匹配正則:
$ awk '$2~/1990/{print $1}' s.txt wanglijiang wanglijiang xiaobao
這裏~
表示匹配正則表達式。!~
表示不匹配正則表達式。
若是須要多選,則改爲:
$ awk '$2~/(1990|1991)/{print $1}' s.txt
6)找出大於1985年出生的學生姓名,年齡,使用表達式:
$ awk '$2>"1985"{print $1,$2}' s.txt lisi 1989 wanglijiang 1990 xuxin 1986 lichang 1989 wanglijiang 1990 lisibao 1989 xiaobao 1990
awk有許多內置變量用來設置環境信息,這些變量能夠被改變,下面給出了最經常使用的一些變量。
ARGC 命令行參數個數 ARGV 命令行參數排列 ENVIRON 支持隊列中系統環境變量的使用 FILENAME awk瀏覽的文件名 FNR 瀏覽文件的記錄數 FS 設置輸入列分隔符,等價於 -F選項。默認是空格 OFS 輸出列分隔符。默認是空格 NF 列的字段總數,$NF指當前列最後一個的值 NR 已讀的記錄數(當前行數) ORS 行輸出分隔符,默認爲\n RS 行輸入分隔符,默認分隔符爲\n RT 指定的那個分隔符 $0 指整條記錄 $1, $2, … $n 分別是第1,2,...n列的字段值
示例:
6)第四個字段科目爲chinese的記錄編號, 學生姓名, 科目:
$ awk '$4=="chinese"{print NR, $1, $4, $5}' s.txt 3 wanglijiang chinese 78 8 wanglijiang chinese 78 12 xiaobao chinese 78
7)統計數學成績大於90的個數:
$ awk 'BEGIN{goodMath=0;}($4=="math" && $5>90){goodMath++}END{print goodMath}' s.txt 3
8)更換輸入換行符
echo "11 22|12 23" | awk 'BEGIN{RS="|"}{print $0}'
等價於:
echo "11 22|12 23" | awk -v RS='|' '{print $0}'
輸出:
11 22 12 23
注:文本內容(例如"11 22n12 23")裏的\n
不是換行符,實際是\\n
。shell裏字符串的\n
要生效,須要使用echo -e
。示例:echo -e "11 22\n12 23" | awk '{print $0}'
。
9)更換列輸入、輸出分隔符:
$ cat /etc/passwd |awk -F ':' -v OFS='\t' '{print $1}' root daemon bin sys
-F
指定輸入域分隔符爲:
。-F
等價於-v FS
。-v OFS
指定輸出域分隔符爲\t
。
注:-F
和-v OFS
在處理MySQL數據導出導入時有很是大的做用:咱們可使用-F
指定每列是以\t
或者,
(csv格式)分隔的;輸出的時候咱們能夠用-v OFS
指定每列分隔符,默認的空格常常不足以方便使用。若是使用了-v OFS
,使用print $0
是改變不了輸出分隔符的,須要手動指定列,例如print $1,$2
。
10)批量操做
# docker裏關閉全部正在運行容器 docker ps | awk '{print $1}' | xargs docker stop # docker裏刪除全部容器應用 docker ps -a | awk '{print $1}' | xargs docker rm
11)文件切割
awk '{filename = "sub." int((NR-1)/5000) ".csv"; print >> filename}' history.csv
每5W行切割爲一個文件。
12)分組合並
例如test.txt文本內容是:
yjc 1 20170118 yjc 1 20170118 lisi 1 20170223
須要整理成(姓名、日期相同的計數累加):
yjc 2 20170118 lisi 1 20170223
腳本:
cat 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還支持內置函數。這裏只列舉部分。
int(x) 返回 x 的截斷至整數的值 rand() 返回任意數字 n,其中 0 <= n < 1。 sqrt(x) 返回 x 平方根。 sub(Ere, Repl, [In]) 字符串替換 gsub(Ere, Repl, [In]) 正則替換 index(str, str2) str2在str中出現的位置,從1開始編號。不存在返回0 substr(str, M, [N]) 返回具備N參數指定的字符數量子串。若是未指定 N 參數,則子串的長度將是M參數指定的位置到str參數的末尾的長度。 length [(str)] 返回 str 參數指定的字符串的長度(字符形式)。若是未給出 str 參數,則返回整個記錄的長度($0 記錄變量)。 match(str, Ere) 返回Ere匹配的字符串在str中出現的位置,從1開始編號。不匹配返回 -1 tolower(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函數
$ echo "10.22元" | awk '{$1=int($1);print $1}' 10
若是隻是想轉換爲數字,可使用乘法運算:
$ echo "10.22元" | awk '{$1=$1*1;print $1}' 10.22
14) 數學函數
$ echo 9 | awk '{$1=sqrt($1);print $1}' 3
15) 字符串函數
$ 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];}' 10 10 620 $ awk 'BEGIN{info="hello shell";split(info,arr," ");print length(arr);for(k in arr){print k,arr[k];}}' 2 1 hello 2 shell
awk for …in
循環,是一個無序的循環。 並非從數組下標1…n
,所以使用時候須要注意。split生成的數組下標從1開始。
16) 時間戳函數
$ 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
格式和C語言的同樣。支持%d %s %u %f %c %o %x
等。
格式符 | 說明 |
---|---|
%d | 十進制有符號整數 |
%u | 十進制無符號整數 |
%f | 浮點數 |
%s | 字符串 |
%c | 單個字符 |
%p | 指針的值 |
%e | 指數形式的浮點數 |
%x | %X 無符號以十六進制表示的整數 |
%o | 無符號以八進制表示的整數 |
%g | 自動選擇合適的表示法 |
$ 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/cheng...
17) if...else
if後面的條件判斷須要使用括號括起來。支持 ==, >, <, >=, <= 等判斷。
示例: 將下列文件格式轉換爲新的格式:
原格式:route.csv
//測試 '/api/user/info' => 'User::getUserInfo', '/api/user/info_batch' => 'User::getUserInfoBatch', //批量獲取
新格式:route2.csv
//測試 '/api/user/info' => ["route" => 'User::getUserInfo', "tag" => 'user'], '/api/user/info_batch' => ["route" => 'User::getUserInfoBatch', "tag" => 'user'], //批量獲取
腳本:
cat 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
和grep、awk不一樣,sed更側重對搜索文本的處理,如修改、刪除、替換等等。
sed工做原理:sed會一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,成爲"模式空間",接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無改變,除非你使用重定向存儲輸出。
語法
sed [options] 'command' file(s) sed [options] -f scriptfile file(s)
參數說明:
-n, --quiet, --silent 安靜模式,也就是不會輸出默認打印信息 -e <script>, --expression=<script> 以選項中指定的script來處理輸入的文本文件,能夠多條 -i 直接編輯文件而不是顯示在屏幕上 -f <script文件>, --file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。 -h, --help 顯示幫助。 -V, --version 顯示版本信息。
動做說明:
a 表示在指定行下邊插入指定行的內容。 i 命令i和a使用上基本上同樣,只不過是在指定行上邊插入指定行的內容。 d 表示刪除指定的行內容 c c是表示把指定的行內容替換爲本身須要的行內容。注意是整行替換 y 字符替換,能夠替換多個字符,只能替換字符不能替換字符串,且不支持正則表達式 s 字符串替換,是平時sed使用的最多的子命令。支持正則表達式 r 相似於a,也是將內容追加到指定行的後邊,只不過r是將指定文件內容讀取並追加到指定行下邊。
sed命令必須跟一個動做。
新建文件t.txt:
zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 1990 female chinese 78
1)新增一行:第3行後新增:
$ sed -e '3a newline' zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 1990 female chinese 78 newline
2)插入一行:第3行前插入:
$ sed -e '3i newline' zhangsan 1977 male computer 83 lisi 1989 male math 99 newline wanglijiang 1990 female chinese 78
3)刪除一行:刪除第3行:
$ sed -e '3d' zhangsan 1977 male computer 83 lisi 1989 male math 99
4)替換一行:
$ sed -e '3c newline' zhangsan 1977 male computer 83 lisi 1989 male math 99 newline
5)行內部份內容的替換:
格式:
sed 's/要被取代的字串/新的字串/g'
示例:
$ sed '3s/1990/2000/g' t.log zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 2000 female chinese 78
一些替換規則範例:
s/\t/","/g; \t換成"," s/^/"/; 開頭加上" s/$/"/;s/\n//g 末尾加上" s/"//g; 引號去掉 s/,/ /g 逗號換成空格 s/,/\n/g 逗號換成空行 s/[NULL]//g; NULL換成空白 s/[,,]/\n/g 中英文逗號換成空行
6)多行操做:
$ sed '2,3d' t.log #刪除2,3行 $ sed '2,$d' t.log #從第2行開始刪除到末尾 $ sed '2,3a test' t.log #分別在第2行,第3行增長字符"test"
7)r命令
sed '2r t.log' message
將a.txt文件內容讀取並插入到t1.log文件第2行的下邊。
注意:
一、上述的操做均只在輸出緩衝裏操做,文件並無變化;須要直接修改文件,前面加-i
參數;
二、-e
參數能夠沒有。
之因此能用到這個命令,關鍵是因爲不少命令不支持|
管道來傳遞參數,而平常工做中有有這個必要,因此就有了xargs
命令,例如:
find /sbin -perm +700 | ls -l #這個命令是錯誤的 find /sbin -perm +700 | xargs ls -l #這樣纔是正確的
排序,默認按照字符升序排序。
-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開始)
如下面的內容爲例:
$ cat 1.txt 456 456 123 11 34 5678 456
按字符降序:
sort -r 1.txt 5678 456 456 456 34 123 11
按數值降序:
# sort -rn 1.txt 5678 456 456 456 123 34 11
去除重複行:
$ sort -nu 1.txt 11 34 123 456 5678
-h
這個通常能夠用來排序文件大小:
$ du -h 2.0G ./test2 4.0K ./test3 316M ./test 2.3G . $ du -h |sort -hr 2.3G . 2.0G ./test2 316M ./test 4.0K ./test3
-t,-k
適用於多列的狀況:
$ cat 2.txt baidu,100,5000 google,110,5000 sohu,100,4500 guge,50,3000
分別表示公司、員工數、最低工資。
咱們先按照員工數升序,若是員工數相同,按照最低工資升序:
$ sort -n -t ',' -k 2 -k 3 2.txt guge,50,3000 sohu,100,4500 baidu,100,5000 google,110,5000
按照員工工資降序排序,若是員工人數相同的,則按照公司人數升序排序:
# sort -t ',' -k 3nr -k 2n 2.txt baidu,100,5000 google,110,5000 sohu,100,4500 guge,50,3000
用於去重,須要先執行sort。
-c: 顯示文件中行重複的次數 -d: 只顯示重複的行(相鄰的行) -D: 把全部重複的行都顯示出來(相鄰的行)
示例:
# 排序後去重 $ sort 1.txt |uniq 11 123 34 456 5678 # 顯示重複次數 $ sort 1.txt | uniq -c 1 11 1 123 1 34 3 456 1 5678 # 僅顯示重複的內容 $ sort 1.txt | uniq -d 456 # 顯示全部重複的行內容 $ sort 1.txt | uniq -D 456 456 456
注:uniq僅針對換行符是\n
,對於windows下編寫的文件若是換行符是\r\n
則沒法排序。
cut 命令和awk功能有些相似,用於列的選取。cut 以行爲單位,用指定分隔符將行切分爲若干字段,選取所須要的字段。
格式:
cut OPTION... [FILE]...
參數:
-d:用來定義分隔符,默認爲tab鍵 -f :以 -d 定義的分隔符選取列,下標從1開始 -c:以字符爲單位進行分割,選取列的字符 -c:以字節爲單位進行分割,選取列的字節 -s:表示不包括那些不含分隔符的行,用於去掉註釋或者標題一類的信息
其中-f
、-c
、-b
選取範圍參數含義:
N:只取第N項 M,N:只取第M項和N項 N-:從第N項一直到行尾 N-M:從第N項到第M項(包括M項) -M:從第一項到第M項(包括M項) -:從第一項開始到結束的全部項
例1:按指定分隔符選取列
$ echo "1,2,3,4,5" | cut -d , -f2-4 2,3,4 $ echo "1,2,3,4,5" | cut -d , -f2,3 2,3 $ echo "1,2,3,4,5" | cut -d , -f2- 2,3,4,5
例2:按指定字符選取列
$ echo "hello world" | cut -c2-4 ell $ echo "hello world" | cut -c2,3 el $ echo "hello world" | cut -c2- ello world
split命令用於將一個文件分割成多個。格式:
split [OPTION]... [INPUT [PREFIX]]
參數:
-l : 指定每多少行切成一個小文件。其中-l能夠省略,僅寫後面的數字。 -b:指定每多少字節切成一個小文件 -C:與參數"-b"類似,可是在切割時將盡可能維持每行的完整性 -d:默認切割後的文件後綴是aa,ab,ac...結尾的,使用該選項後會以00,01,02...結尾 -a:指定後綴長度,默認的後綴長度是 2,也就是按 aa、ab、ac 這樣的格式依次編號 [PREFIX] :設置切割後文件的文件名前綴,默認是x
示例:
$ wc -l access_test.log 528 access_test.log $ split -l 200 access_test.log access_test_ -d $ ls access* access_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_byte* access_byte000 access_byte001 access_byte002 access_byte003 access_byte004 $ du -h access_byte* 20K access_byte000 20K access_byte001 20K access_byte002 20K access_byte003 12K access_byte004
paste 用於把兩個文件的內容按列合併一塊兒,而不是簡單在文件後面追加。相似於 MySQL裏的左聯查詢多個表的結果。
格式:
paste [OPTION]... [FILE]...
參數:
-d 拼接時使用指定符號隔開各個文件的內容 -s 將全部換行刪掉
示例1:
$ cat a.txt 1 2 3 $ cat b.txt a b c $ paste -d ':' a.txt b.txt 1:a 2:b 3:c
示例2:
$ paste -s -d ',' a.txt 1,2,3 $ echo -e "1\n2\n3" | paste -s -d ',' 1,2,3
待整理。
scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,和它相似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,並且scp傳輸是加密的。
格式:
scp [參數] [原路徑] [目標路徑]
示例:
# 遠程複製到本地 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/
命令參數:
-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(remote sync) 是用於同步某一位置文件和目錄到另外一位置的有效方法。備份的位置能夠在本地服務器或遠程服務器。
rsync [OPTION]... SRC [SRC]... DEST
示例:
將Jenkins編譯生成的文件同步到遠程服務器,排除git目錄:
rsync -azP --exclude .git /var/lib/jenkins/workspace/myapi/output/ root@172.17.17.10:/alidata/myapi/
參數:
-a --參數,至關於-rlptgoD ,同步軟連接,同步權限, 同步時間戳,同步屬主和屬組 -r --是遞歸 -l --是連接文件,意思是拷貝連接文件 -i --列出 rsync 服務器中的文件 -p --表示保持文件原有權限 -t --保持文件原有時間 -g --保持文件原有用戶組 -o --保持文件原有屬主 -D --至關於塊設備文件 -z --傳輸時壓縮 -P --傳輸進度 -v --傳輸時的進度等信息,和-P有點關係
與scp的區別:
一、對於scp來講,除了在機器之間和一個機器目錄之間進行數據同步以外,還能夠在兩臺不一樣機器之間進行數據同步。好比你在A機器,能夠對B、C兩臺機器上的數據進行同步,可是rsync就不能夠;也就是說當rsync進行跨機器同步數據的時候只能夠在本機與另一臺機器之間進行數據的同步。
二、rsync是爲了在兩個機器之間進行數據的同步,既然有了scp爲什麼還要有這個協議呢?該協議主要目的是在兩臺機器之間進行數據同步的時候,儘可能少的傳遞數據。rsync能夠聰明的在兩臺機器之間進行數據的同步,並經過合適的差分編碼減小數據的傳輸。rsync的做用就是當要同步數據的對端已經存在部分要同步數據的狀況下,經過使用rsync能夠只傳遞對端沒有的數據。假設一個文件100G,在文件末尾只加了一個句號。這時候要同步數據,若是使用scp那麼要拷貝傳輸100G數據過去,而rsync只傳輸修改後的數據,整個任務就結束了。
一、linux awk命令詳解 - ggjucheng - 博客園
http://www.cnblogs.com/ggjuch...
二、sed入門詳解教程 - 肖邦linux - 博客園
https://www.cnblogs.com/liwei...
三、Linux 入門記錄:十7、Linux 命令行文本/文件處理工具 - mingc - 博客園
https://www.cnblogs.com/mingc...
四、linux sort 命令詳解 - 孫愚 - 博客園
https://www.cnblogs.com/51lin...
五、OFS-輸出字段分隔符 | awk
https://lvs071103.gitbooks.io...
六、Awk關係運算符和布爾運算符 - 自由的代價永遠是警戒 - CSDN博客
https://blog.csdn.net/liu4546...
七、linux awk 內置函數詳細介紹(實例) - 程默 - 博客園
https://www.cnblogs.com/cheng...
八、rsync 使用示例 | 《Linux就該這麼學》
https://www.linuxprobe.com/rs...
九、Linux之rsync數據同步服務 - 瀟瀟、寒 - 博客園
http://www.cnblogs.com/caicai...
十、【Linux】Linux下同步數據scp與rsync - zwan0518的專欄 - CSDN博客
https://blog.csdn.net/zwan051...
十一、天天一個linux命令(60):scp命令 - peida - 博客園
http://www.cnblogs.com/peida/...