Linux Shell程式設計(23)——文字處理命令

尹成發表於2014-09-30
處理文字和文字檔案的命令


sort
檔案排序, 通常用在管道中當過濾器來使用. 這個命令可以依據指定的關鍵字或指定的字元位置, 對檔案行進行排序. 使用 -m 選項, 它將會合並預排序的輸入檔案. 想了解這個命令的全部引數請參考這個命令的 info 頁. 見 Example 10-9, Example 10-10, 和 Example A-8.


tsort
拓撲排序 ,讀取以空格分隔的有序對, 並且依靠輸入模式進行排序.


uniq
這個過濾器將會刪除一個已排序檔案中的重複行.這個命令經常出現在 sort命令的管道後邊 .


expand, unexpand
expand 將會把每個tab轉化為一個空格.這個命令經常用在管道中.


unexpand 將會把每個空格轉化為一個tab.效果與 expand 相反.


cut
一個從檔案中提取特定域的工具. 這個命令與 awk 中使用的 print $N命令很相似, 但是更受限. 在指令碼中使用cut命令會比使用 awk 命令來得容易一些. 最重要的選項就是 -d (欄位定界符) 和 -f (域分隔符) 選項.


grep
使用 正規表示式 的一個多用途文字搜尋工具. 這個命令本來是 ed 行編輯器中的一個命令/過濾器: g/re/p -- global - regular expression - print.


grep pattern [file...]


在檔案中搜尋所有 pattern 出現的位置, pattern 既可以是要搜尋的字串,也可以是一個正規表示式.
-i 選項在搜尋時忽略大小寫.
-w 選項用來匹配整詞.
-l 選項僅列出符合匹配的檔案, 而不列出匹配行.
-r (遞迴) 選項不僅在當前工作目錄下搜尋匹配, 而且搜尋子目錄.
-n 選項列出所有匹配行, 並顯示行號.


#!/bin/bash
# grp.sh: 一個非常粗糙的 'grep' 的實現.


E_BADARGS=65


if [ -z "$1" ]    # 檢查傳遞給指令碼的引數.
then
  echo "Usage: `basename $0` pattern"
  exit $E_BADARGS
fi  


echo


for file in *     # 遍歷 $PWD 下的所有檔案.
do
  output=$(sed -n /"$1"/p $file)  # 命令替換.


  if [ ! -z "$output" ]           # 如果"$output" 不加雙引號將會發生什麼?
  then
    echo -n "$file: "
    echo $output
  fi              #  sed -ne "/$1/s|^|${file}: |p"  這句與上邊這段等價.


  echo
done  
echo
exit 0





相關文章