1. 程式人生 > >shell遍歷當前目錄下的檔案,用去掉檔案字尾的字串替換檔案中的文字

shell遍歷當前目錄下的檔案,用去掉檔案字尾的字串替換檔案中的文字

今天寫了一個shell,遍歷當前目錄下的檔案,用每個檔案的檔名去掉字尾的字串替換檔案中的一段字串。 
指令碼如下:

  1. #!/bin/bash
  2. file=`ls *.html`;
  3. echo $file
  4. for item in $file
  5. do
  6. filename=${item%.*}
  7. echo $filename
  8. sed -i "s/search('channel')/search('${filename}')/g" $item
  9. done

總結如下: 
1、得到一個檔案的檔名以及字尾的方法: 
得到檔名:${file%.*} 
得到字尾名:${file##*.} 
2、sed的使用:

  • sed基本替換語法:sed 's/str1/str2/g'
    , 單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線”\”進行轉義,但是單引號”‘”是沒有辦法用反斜線”\”轉義的,這時候只要把命令中的單引號改為雙引號就行了,比如:sed "s/原字串包含'/替換字串包含'/" //要處理的字元包含單引號
  • 命令中的三根斜線分隔符可以換成別的符號,這在要替換的內容有較多斜線是較為方便,只需要緊跟s定義即可,例如換成問號”?”:sed 's?原字串?替換字串?' //自定義分隔符為問號
  • 可以在末尾加g替換每一個匹配的關鍵字,否則只替換每行的第一個,例如:sed 's/原字串/替換字串/' //替換所有匹配關鍵字
  • 上箭頭”^”表示行首,美元”$”符號如果在引號中表示行尾,但是在引號外卻表示末行(最後一行),這裡犯二了,搜了半天哪個符號表示首行,半天才想起來,首行就是數字”1″啊.那麼在行首和行尾新增字串就是把行尾和行首替換,例如:
  1. sed 's/^/新增的頭部&/g'//在所有行首新增
  2. sed 's/$/&新增的尾部/g'//在所有行末新增
  3. sed '2s/原字串/替換字串/g'//替換第2行
  4. sed '$s/原字串/替換字串/g'//替換最後一行
  5. sed '2,5s/原字串/替換字串/g'//替換2到5行
  6. sed '2,$s/原字串/替換字串/g'//替換2到最後一行
  • 替換樣式可以多個在同一條命令中執行,用分號”;”分隔,例如:sed 's/^/新增的頭部&/g;s/$/&新增的尾部/g' //同時執行兩個替換規則
  • sed處理過的輸出是直接輸出到螢幕上的,要儲存可以將輸出重定向,或者使用引數”i”直接在檔案中替換:sed -i 's/原字串/替換字串/g' filename //替換檔案中的所有匹配項