摘要:命令說明以上命令,只會對滿足規(guī)則的文件進行重命名操作,而忽略了條件查找出來的文件,因此并不能滿足要求,另外一定要注意命令結尾的空格和。
在使用Linux的過程中,最常做的操作就是對文件/文本進行一些處理。本文簡單介紹下Linux中常用的文本處理命令,主要包括以下命令: find / grep / sort / cut / awk / sed / uniq / tee / tr / diff / cmp / split / xargs,下面依次介紹。
find
命令說明: 查找符合條件的文件,并執(zhí)行指定的操作
命令格式: find [指定目錄] [查找規(guī)則] [指定操作]
1.1 指定目錄
[dir1 dir2] # 可以指定多個目錄
1.2 查找規(guī)則
[-name] # 根據(jù)文件名查找 (區(qū)分大小寫|支持通配符)
[-iname] # 根據(jù)文件名查找 (不區(qū)分大小寫|支持通配符)
[-user] # 根據(jù)所屬用戶查找
[-group] # 根據(jù)所屬用戶組查找
[-nouser] # 查找無所屬用戶的文件
[-nogroup] # 查找無所屬用戶組的文件
[-uid] # 根據(jù)用戶ID查找
[-gid] # 根據(jù)組ID查找
[-a] # AND 連接兩個條件
[-o] # OR 連接兩個條件
[-not] # NOT 對條件取反
[-atime -n/+n] # 按文件訪問時間 (n天以內 / n天以前)
[-ctime -n/+n] # 按文件創(chuàng)建時間 (n天以內 / n天以前)
[-mtime -n/+n] # 按文件修改時間 (n天以內 / n天以前)
[-type f/d/l/b/c/p/s] # 按文件類型 (普通文件/目錄文件/鏈接文件/塊設備文件/字符設備文件/管道文件/socket文件)
[-size 2M/+2M/-2M] # 按文件大小 (等于2M / 大于2M / 小于2M)
[-perm 755] # 按文件權限 (755權限)
1.3 指定操作
{} # 代表找到的文件
[-print] # 查找后打印結果 (默認操作)
[-ls] # 查找后把結果列表顯示
[-ok] # 查找后詢問用戶是否執(zhí)行命令
[-exec] # 查找后不詢問直接執(zhí)行命令
1.4 舉例說明
要求:查找 (/data/ 和 /www/) 目錄下的后綴名為 (.php 或 .sh) 且創(chuàng)建時間在 5天之內 的 普通文件 并 重命名。
[命令1]find /data/ /www/ -name ".php" -o -name ".sh" -ctime -5 -type f -exec mv {} {}.bak ;
說明:以上命令 [-exec] ,只會對滿足 .sh 規(guī)則的文件進行重命名操作,而忽略了 -o 條件查找出來的 .php 文件,因此并不能滿足要求,另外一定要注意命令結尾的空格和 ; 。
[命令2]find /data/ /www/ -name ".php" -o -name ".sh" -ctime -5 -type f | xargs -i mv {} {}.bak
說明:借助 xargs -i 命令滿足了要求。這個命令后續(xù)會進行介紹。
grep
命令說明: 使用正則表達式來按行搜索文本
命令格式: grep [選項] [指定模式] [指定文件]
2.1 選項
[-c] # 計算符合條件的行數(shù)
[-i] # 不區(qū)分字符大小寫
[-h] # 在顯示匹配指定的模式的那一行之前不標示該行所屬的文件名
[-H] # 在顯示匹配指定的模式的那一行之前標示該行所屬的文件名
[-l] # 列出文件內容匹配指定的模式的文件名
[-L] # 列出文件內容不匹配指定的模式的文件名
[-n] # 在顯示匹配指定的模式的那一行前顯示該行的行號
[-v] # 顯示不匹配指定的模式的所有行
[-s] # 不顯示錯誤信息
2.2 指定模式
正則表達式
2.3 指定文件
要查找的文件/支持多文件
2.4 舉例說明
暫無
sort
命令說明: 對文本文件以行為單位按照指定的規(guī)則進行排序
命令格式: sort [選項] [指定文件]
3.1 選項
[-b] # 忽略每行前面的空格
[-c] # 檢查文件是否已經(jīng)按照順序排序
[-f] # 排序時忽略大小寫字母
[-M] # 將前3個字母按照月份的縮寫進行排序
[-n] # 按照數(shù)值的大小進行排序
[-o new.txt] # 將排序后的結果存入指定文件 (new.txt)
[-r] # 以相反的順序來排序
[-t ":"] # 指定排序時的欄位分隔符 (:)
[-k] # 選擇以哪個區(qū)間進行排序 (與 -t 結合使用)
[-u] # 對排序結進行去重
3.2 指定文件
要進行排序的文件
3.3 舉例說明
暫無
cut
命令說明: 對文本文件以行為單位按照字符/字節(jié)/片段進行分割并輸出
命令格式: cut [-bn] [文件] 或 cut [-c] [文件] 或 cut [-df] [文件]
4.1 選項
[-b] # 以字節(jié)為單位進行分割
[-c] # 以字符為單位進行分割
[-d] # 自定義分隔符/默認為制表符
[-f] # 以哪個字段進行分割 (與 -d 結合使用)
[-n] # 取消分割多字節(jié)字符 (與 -b 結合使用 | 避免分割中文亂碼)
4.2 按字節(jié)分割
cut [-bn] [文件]
4.3 按字符分割
cut [-c] [文件]
4.4 按片段分割
cut [-d ":" -f 1-n] [文件]
說明:以 : 為分隔符進行分割后輸出指定的(第[1-n]個)片段
4.5 舉例說明
暫無
awk
命令說明: awk 是一種編程語言,用于在 linux/unix 下對文本和數(shù)據(jù)進行處理。數(shù)據(jù)可以來自標準輸入 (stdin) 、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數(shù)和動態(tài)正則表達式等先進功能,是 linux/unix 下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk 有很多內建的功能,比如數(shù)組、函數(shù)等,這是它和C語言的相同之處,靈活性是 awk 最大的優(yōu)勢。
sed
命令說明: sed 是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為模式空間(pattern space),接著用 sed 命令處理緩沖區(qū)中的內容,處理完成后,把緩沖區(qū)的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。sed 主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。
uniq
命令說明: 刪除排序過的文件中的重復行 (與 sort 結合使用) 必須保證所有的重復行是相鄰的
命令格式: uniq [選項] [輸入文件] [輸出文件]
7.1 選項
[-b] # 在輸出行前加上該行在文件中出現(xiàn)的次數(shù)
[-d] # 僅顯示重復的行
[-u] # 僅顯示不重復的行
[-n] # 前n個字段與每個字段前的空白一起被忽略
[-f n] # 前n個字段與每個字段前的空白一起被忽略
[+n] # 前n個字符被忽略
[-s n] # 前n個字符被忽略
[-w n] # 指定要比較第n個字符
說明:一個字段是一個非空格、非制表符的字符串,彼此由制表符和空格隔開,字段從0開始編號,字符從0開始編號。
7.2 輸入文件
要進行按行去重的文件
7.3 輸出文件
去重后生成的文件
7.4 舉例說明
暫無
tee
命令說明: 將數(shù)據(jù)重定向到指定文件并在屏幕上輸出
命令格式: tee [選項] [指定文件]
8.1 選項
[-a] # 向文件中重定向時使用追加模式
[-i] # 忽略中斷信號
8.2 指定文件
要保存輸出的內容的文件
8.3 舉例說明
暫無
tr
命令說明: 對來自標準輸入的字符進行替換/壓縮/刪除
命令格式: tr [選項] [字符集1] [字符集2]
9.1 選項
[-c] # 取代所有不屬于 字符集1 的字符
[-d] # 刪除所有屬于 字符集1 的字符
[-s] # 把連續(xù)重復的字符以多帶帶的一個字符表示
[-t] # 先刪除 字符集1 較 字符集2 多出的字符
9.2 字符集1
指定要轉換或刪除的原字符集
9.3 字符集2
指定要轉換成的目標字符集
9.4 舉例說明
將大寫字母轉換為小寫echo "PHPHA.COM" | tr "A-Z" "a-z"
output: phpha.com 刪除數(shù)字echo "1PHPHa2.com3" | tr -d "0-9"
output: PHPHa.com 替換連續(xù)重復的字符(s/n/空格)為一個指定的字符echo "thissss is a text linnnne" | tr -s " sn"
output: this is a text linediff
命令說明: 逐行對給定的兩個文件進行比較
命令格式: diff [選項] [文件1] [文件2]
10.1 選項
[-a] # 將兩個文件當做文本文件來處理
[-b] # 忽略空格
[-B] # 忽略空行
[-c] # 使用綱要輸出格式
[-H] # 利用試探法加速大文件搜索
[-i] # 忽略大小寫
[-u] # 以合并的方式來顯示
10.2 舉例說明
暫無
cmp
命令說明: 比較兩個文件是否有差異
命令格式: cmp [選項] [文件1] [文件2]
11.1 選項
[-l] # 標示出所有不一樣的地方
[-s] # 不顯示錯誤信息
[-n N] # 設定比較的上限 (最多 N 個字節(jié))
[-i N] # 越過開始的 N 個字節(jié)進行比較
[-i N1:N2] # 越過 文件1 的 N1 個字節(jié)且越過 文件2 的 N2 個字節(jié)進行比較
11.2 舉例說明
暫無
split
命令說明: 將一個大文件分成多個小文件
命令格式: split [選項] [文件]
12.1 選項
[-b N] # 每個輸出檔案的大小 (N字節(jié)) / 即每個小文件的大小
[-d -a N] # 使用數(shù)字作為分割出的小文件的文件名后綴 / 數(shù)字長度為 N
12.2 舉例說明
[root@PHPHa ~]# split -b 10k test.file -d -a 3
[root@PHPHa ~]# ll
total 232
-rw-r--r-- 1 root root 102400 Sep 6 14:47 test.file
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x000
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x001
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x002
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x003
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x004
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x005
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x006
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x007
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x008
-rw-r--r-- 1 root root 10240 Sep 6 14:48 x009
xargs
命令說明: 作為給其他命令傳遞參數(shù)的過濾器,也是組合多個命令的一個工具。它擅長將標準輸入數(shù)據(jù)轉換成命令行參數(shù),xargs 能夠處理管道或者stdin 并將其轉換成特定命令的命令參數(shù)。xargs 也可以將單行或多行文本輸入轉換為其他格式,例如多行變單行,單行變多行。
命令格式: xargs [選項]
13.1 選項
[-n N] # 指定每行的最大列數(shù) (N) 以多行輸出
[-d ":"] # 定義一個定界符 (:)
[-I "{}"] # 指定一個替換字符串 ({})
13.2 舉例說明
[root@PHPHa ~]# cat test.txt
a b c d e f g
h i j k
l m n
[root@PHPHa ~]# cat test.txt | xargs -n 4
a b c d
e f g h
i j k l
m n
[root@PHPHa ~]# echo "PHP:MySQL:Redis" | xargs -d ":"
PHP MySQL Redis
[root@PHPHa ~]# ll
total 4
-rw-r--r-- 1 root root 28 Sep 6 14:58 test.txt
[root@PHPHa ~]# find . -name "*.txt" -type f | xargs rm -f {}
[root@PHPHa ~]# ll
total 0
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22725.html
閱讀 1125·2021-11-24 09:38
閱讀 3229·2021-11-19 09:56
閱讀 2954·2021-11-18 10:02
閱讀 721·2019-08-29 12:50
閱讀 2566·2019-08-28 18:30
閱讀 859·2019-08-28 18:10
閱讀 3659·2019-08-26 11:36
閱讀 2640·2019-08-23 18:23