wiki:waue/2009/0521
  • 用shell 批次改檔名
    • 此用法應用到 for in , 正規表示法, awk , sed 因此還學滿多的
      #!/bin/sh
      cd ~/test2
      echo `pwd`
      for i in *.[tT][iI][fF]; do
              # 防止有個檔案叫做*.[tT][iI][fF]
              if [ "$i" != "*.[tT][iI][fF]" ]; then
                      #取得副檔名
                      subname="`echo $i | awk -F '.' '{print $NF}'`"
                      #取得主檔名
                      filename="`echo $i | sed -e s/\.${subname}//`"
                      #將 .tif 轉成 .pdf
                      #tiff2pdf -o "${filename}.pdf" "$i"
                      echo "${filename}.${subname} -> ${filename}.pdf"
                      cp ${filename}.${subname} ${filename}.pdf
                      #若執行成功則刪除 .tif 檔案
                      if [ $? -eq 0 ]; then
                              rm -rf $i
                      fi
              fi
      done
      
  • awk
    • -F 指定分隔字元為何
    • 內可表明要執行的script
    • 最後的欄位填入檔案,若 指令 |awd
      Examples:
      	gawk '{ sum += $1 }; END { print sum }' file
      	gawk -F: '{ print $1 }' /etc/passwd
      
  • sed
    Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
      -n, --quiet, --silent
                    suppress automatic printing of pattern space
      -e script, --expression=script
                     add the script to the commands to be executed
    
 * 正規表示法
   * [aA]oo 代表 aoo 或 Aoo
   * [a-z]o 代表 ao, or bo,...或zo
   * [^a-z]oo 代表 不要有 aoo, .... 或zoo,
   * ^the 代表該行開頭為 the的字
   * ^[^a-zA-Z] 代表 行首不要有a或A-Z的字
   * \.$ 代表 行尾為.的行
   * ^$  代表無字元的行
   * g.*g 代表 任何頭尾為g的字串,包含gg,goog等
   * g.+g 代表 任何頭尾為g且中間不為空的字,如gog,但不包含gg
   * g.?g 代表 任何頭尾有g但中間只有一個或0個字元的字,包含gg,gog, 不包含goog等
   * o\{2\} 代表出現oo的字串 (\為跳脫字元,否則會被shell給解析成另外的意思)
   * a|b 代表 a 或 b 
   * A(xyz)+C 代表 字串如 AxyzxyzxyzxyzC 但不包含AC ,"(" 與 ")" 代表群組的意思
Last modified 16 years ago Last modified on May 26, 2009, 5:59:26 PM