標籤:use 第一個 .com array 文本 集合 單行 讀取 for
一、 awk
命令格式:
awk ‘BEGIN{commands} pattern {commands} END{commands}’file
工作方式:
1.執行BEGIN{commands}語句塊中語句,可選的語句塊
2.從檔案或者stdin中讀取一行,然後執行{commands},重複這個過程,直到檔案全部被讀取完
3.當讀至輸入資料流末尾是,執行END{commands}語句塊
特殊變數:
FILENAME:awk瀏覽的檔案名稱
NR:記錄數量,執行過程中對應於當前行號
NF:欄位數量,執行過程中對應於當前行的欄位數
FS:設定分隔字元,命令列 -F
$0:執行過程中當前行的常值內容
$1:第一個欄位的常值內容
$2:第二個欄位的常值內容,以此類推
print&printf列印輸出的函數
print的參數是以逗號進行分隔時,參數列印時則以空格作為定界符,awk的print語句中,雙引號是被當做拼接操作符使用的
printf函數,其用法和c語言中printf基本相似,可以格式化字串,輸出複雜時,printf更加好用,代碼更易懂。
流程式控制制語句
if(condition)else{}
while(){}
do{}while()
for(;;)等
內建字串控制函數:
1.length(string):返回字串的長度
2.index(string,search_string):返回search_string在字串中出現的位置
3.substr(string,start_pos,end-pos):在字串中從start-pos開始到end-pos位置,產生子串
4.split(string,array,delimiter):用delimiter產生一個字串列表,並將該列表存入數組,delimiter預設使用當前FS值。
5.sub(regex,replace_str,string):將Regex匹配到的第一處內容替換成replace_str
6.gsub(regex,replace_str,string):替換Regex匹配到所有的內容
7.match(regex,string):檢測Regex是否能夠匹配字串
應用:
1.從檔案或者stdin中讀取一行,迴圈執行{commands},直到讀完
echo "aXbX cXdXe a;b;cX d;e" | awk -F"[X|;| ]+" ‘BEGIN{print "begin:"} {for(i=1;i<=NF;++i){++S[$i];printf("$%d=%s\n",i,$i)}} END {print "end:"; for(i in S) print i, S[i]}‘
2.split函數
二、sed
sed文法格式:
sed[options ]‘command’ file(s)
sed常用選項:
-n:只有經過sed 特殊處理的那一行(或者動作)才會被列出來
-e:組合多個sed命令
-f:執行 filename 內的sed 動作
-r:sed 的動作支援的是延伸型正規標記法的文法
-i:直接修改讀取的檔案內容,而不是螢幕輸出
sed常用命令:
a:追加 sed ‘a xxx’ file 每一行後面都追加xxxx sed‘$a xxx’file 最後一行追加
i:插入 sed ‘i xxx’file 每一行前面插入xxx
c:取代 sed ‘2c xxx’file 第二行用xxx取代
d:刪除 sed ‘/^$/d’file 刪除空白行 sed ‘1,5d’file 刪除第1-5行
s:替換 sed ‘s/pattern/replace_str/g’file /g意味sed會替換每一處匹配,否則是第一處匹配
&:標記匹配樣式的字串,可以在替換字串時使用已匹配的內容
\1 or \2:第1個or第2個匹配的字串
應用:
1.&:標記匹配樣式的字串,可以在替換字串時使用已匹配的內容
2.\1 or \2:第1個or第2個匹配的字串,\(pattern\)用於匹配子串,模式被包括在使用斜線轉義過的()中
3.使用管道組合多個sed命令
sed ‘expression’ | sed ‘expression’
sed ‘expression;expressiong’
sed -e ‘expression’ -e ‘expression’
三、tr---translate轉換
tr文法格式:
tr [options] set1 set2
原理:通過集合映射的概念,將set1映射成set2
-常用參數
-d:指定需要被刪除的字元集合
-c:使用集合的補集
tr –c set1 set2 使用set1的補集,即不包含set1的所有字元
-s:壓縮輸入中重複的字元,將連續重複的字元合并為一個字元
應用:
1.加密解密
2.數字檔案相加
將檔案中的\n轉換成+,利用$[ operation ]執行算術運算
3.tr集合列表
tr [:class:] [:class:]
alnum:字母和數字 alpha:字母
digit:數字 cntrl:控制(非列印)字元
lower:小寫字母 upper:大寫字母
graph:圖形字元 punct:標點符號
space:空白字元 xdigit:十六進位字元
四、find
find:沿著檔案階層向下遍曆,匹配合格檔案,執行相應操作
常用參數
-print:列印出批判檔案的檔案名稱(路徑),\n是輸出檔案的分割符
-print0:\0(null)作為輸出檔案的分割符,xargs -0
-name:檔案名稱必需匹配的字串,\(-name“xx”-o -name“xx”\) 匹配多個字串
-iname:忽略字母大小寫
-path:匹配檔案路徑
-type:檔案類型過濾
-size:檔案大小搜尋
-delete:刪除尋找到的檔案
-perm:匹配具有特定許可權值的檔案
-newer:指定一個用於比較時間戳記的參考檔案,匹配出參考檔案更新的所有檔案
-user:制定某使用者檔案
-exec:藉助-exec與其他命令進行結合,命令格式為:command {} \; 注意{}和\之間的空格
-ok:和-exec的作用相同,只是在安全模式下進行操作,按y鍵yes,按n鍵no
-atime:訪問時間,使用者最近一次訪問檔案的時間,單位:天 -amin 單位:分
-mtime:修改時間,檔案內容最後一次被修改的時間,單位:天 –mmin 單位:分
-ctime:檔案(例如許可權或所有權)最後一次改變的時間,單位:天 –cmin單位:分
-表示小於(最近) +表示大於(超過) 沒有- 或+ 表示數字當天
!:表示不匹配規則的檔案
應用:
1.-exec:藉助-exec與其他命令進行結合,命令格式為:command {} \; 注意{}和\之間的空格
五、xargs
xargs:構造命令列參數並運行命令
同管道的區別
管道是實現將前面的標準輸出作為後面的標準輸入
xargs是實現將標準輸入作為命令的參數
xargs的預設命令是echo,預設定界符是空格(空白字元)
這意味著傳遞給xargs的輸入如果包含換行和空白字元,通過xargs的處理,換行和空白將被空格取代,因此xargs是構建單行命令的重要組件之一
常用參數
-n number :多行輸出,多個參數
-d X:自訂定界符
-I | -i replace_str:在xargs擴充時replace_str會被替換為從標準輸入的每一行參數
-L number :標準輸入讀取非空number行作為參數,-L 1 等價於-I
-p:詢問是否運行
-t:啟用跟蹤方式
-s size:設定命令列的最大位元組數
-x:如果有任何 命令列大於 -s Size 標誌指定的位元組數,停止運行 xargs 命令
應用:
1.-n number:設定命令的參數個數
2.-I replace_str:命令參數替換
3.xargs和find算是一對死黨
find的-print0和xargs的-0
ps:只要是把find的輸出結果作為xargs的輸入,就必須將-print0與find結合使用,以字元null(\0)來分割,同時,xargs -0將null作為定界符
Linux命令簡單操作