提升效率必備,掌握這些 Shell 文本處理技能!
Shell腳本是Linux系統里的一項基本功,就算它的語法看起來有點奇怪,讀起來也不是特別順暢,但在一些情況下,它仍然是最能干的解決辦法。學好Shell腳本,不僅讓你對Linux系統了解更深,還能讓你手快地做好很多日常任務。
在這篇文章里,我會跟你分享在Linux Shell里處理文字時最常使用的幾個“利器”:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed和awk,而且每個都會配上實用的例子。我們的目標是讓腳本簡單直白,最好一行命令或者兩行就搞定。
一、找文件的小能手
find是個找文件的小能手,本事大得很,不管文件躲在哪個角落,它都能幫你把它揪出來。
1.查找指定類型文件
查找 .txt 和 .pdf 文件:
find . \( -name "*.txt" -o -name "*.pdf" \) -print
使用正則表達式查找 .txt 和 .pdf:
find . -regex ".*\(\.txt|\.pdf\)$"
-iregex:忽略大小寫的正則。
2.查找特定條件的文件
查找最近 7 天被訪問的文件:
find . -atime -7 -type f -print
查找大于 2K 的文件:
find . -type f -size +2k
3.后續操作
刪除 .swp 文件:
find . -type f -name "*.swp" -delete
將 10 天前的 .txt 文件拷貝到 OLD 目錄:
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
二、文本搜索神器
grep是個超級好用的工具,專門用來在大量文字中找到你需要的內容。
1.常用選項
只顯示匹配行:
grep "pattern" file
統計匹配次數:
grep -c "pattern" file
打印匹配行的行號:
grep -n "pattern" file
遞歸搜索:
grep -r "pattern" .
2.擴展功能
多模式匹配:
grep -e "pattern1" -e "pattern2" file
查找并刪除文件:
grep "pattern" file* -lZ | xargs -0 rm
三、命令行高效參數處理器
xargs 具有將命令輸出作為后續命令行參數的功能,從而實現了多個命令的高效與靈活鏈式執行。
實用示例
多行輸出轉為單行:
cat file.txt | xargs
將文件中的每一行傳遞給腳本:
cat file.txt | xargs -I {} ./script.sh -p {}
統計 .cpp 文件中的行數:
find . -name "*.cpp" -print0 | xargs -0 wc -l
四、排序與去重
進行數據去重與排序操作:利用 sort 命令實現數據的有序排列,而采用 uniq 工具則旨在消除序列中的冗余重復項,從而達到精簡數據集的目的。
1.排序
按數字降序排序:
sort -nrk 1 data.txt
2.去重
去除重復行:
sort file.txt | uniq
統計每行出現的次數:
sort file.txt | uniq -c
五、字符轉換
tr是一個在Unix和Linux操作系統中廣泛使用的命令行工具,其全稱為"translate"。該工具主要用于對來自標準輸入或指定文件的字符進行替換、刪除或壓縮操作。
基本語法結構如下:
tr [選項] 從字符集 到字符集
- 從字符集 指定了需要被轉換或刪除的原始字符。
- 到字符集 指定了轉換目標字符或操作(如果只想刪除字符,則此部分可省略)。
基礎用法
例如,以下命令將把輸入文本中的所有小寫字母轉換為大寫字母:
echo "hello world" | tr 'a-z' 'A-Z'
另一個例子是刪除文本中的所有數字:
echo "Example123 text." | tr -d '0-9'
tr命令還支持一些選項來擴展其功能,如-d用于刪除字符,而不是轉換它們;-s用于壓縮連續重復的字符為一個。
六、按列切割文本
cut`是 Linux 中用于按列截取文本的命令。它通過指定分隔符(默認為制表符)來選擇并提取文件中的特定字段或字符。它常用于處理結構化數據,如 CSV 文件,快速提取有用的信息。
基本操作
截取第 2 和第 4 列:
cut -f2,4 filename
排除第 3 列:
cut -f3 --complement filename
七、按列拼接文本
paste命令用于將多個文件的內容按列拼接在一起,生成一個新的輸出。它會逐行讀取每個文件,并將相應行的內容用制表符(默認)或指定的分隔符連接起來。常見用法包括將兩個文件橫向拼接在一起,或將單個文件的多列數據合并。
基本用法
將兩個文本按列拼接到一起
cat file1 file2
colin
book
默認的定界符是制表符,可以用-d指明定界符。
paste file1 file2 -d ','
colin,book
八、統計行、詞和字符數
wc(word count)是一個用于統計文件內容的命令行工具,能夠統計文件中的行數、單詞數、字符數等信息。常見用法包括統計行數wc -l、單詞數wc -w以及字符數wc -m。它可以處理多個文件,并在終端中輸出每個文件的統計結果,通常用于文本分析和簡單的文件內容審計。
基本用法
統計行數:
wc -l file
統計單詞數:
wc -w file
九、流編輯器
sed(Stream Editor)是一個輕量級、強大的文本處理工具,適用于在流式數據或文件中進行快速的查找、替換、刪除、插入等操作。它以非交互的方式逐行處理文本,支持正則表達式,常用于批量編輯和轉換文件內容。sed的常見用途包括替換字符串、刪除或提取特定行、插入文本等,非常適合需要在命令行中對文件進行簡單編輯的場景。
1.文本替換
替換每行的第一個匹配項:
sed 's/old/new/' file
全局替換:
sed 's/old/new/g' file
2.其它操作
移除空行:
sed '/^$/d' file
十、文本處理利器
awk 是處理結構化文本的強大工具,支持復雜的模式匹配和數據處理。
1.基本用法
打印每行的第二個字段:
awk '{print $2}' file
統計行數:
awk 'END {print NR}' file
過濾并打印匹配的行:
awk '/pattern/' file
2.進階功能
按范圍打?。?/p>
awk 'NR==4,NR==6{print}' file
格式化輸出:
seq 10 | awk '{printf "->%4s\n", $1}'
總結
雖然 Python 等腳本語言在復雜任務中更具優勢,但使用 Shell 腳本處理簡單的文件操作和文本處理依然十分高效。本文介紹的這些工具都是非常基礎且實用的命令,希望能幫助你快速提升在 Linux 下的操作效率。