歡迎您光臨本站 註冊首頁

我也要低碳之:使用bash內部的字元串處理

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
經常看到一些腳本中, 做一些簡單的字元串處理/計算字元串長度,也動用管道+ awk/sed/cut等相對重量級工具:),其實大可不必, 因為bash本身就自帶一些簡單字元串處理功能, 這樣至少可以減少重新fork一個進程來做字元串處理的開銷, 也算為伺服器減排co2做一些貢獻吧:)

# 定義幾個變數用於測試目的
FILE_NAME="/usr/local/app/world.txt"
TIME_NOW="`date +"%Y%m%d%H%M%S"`"
# 1. 取字元串的子串, 比如說從TIME_NOW分別取出日期和時間
DATE_TODAY="${TIME_NOW:0:8}"    # ${var:beg_pos:sub_str_length}, beg_pos是子串的起始位置(從0開始), sub_str_length為子串長度
TIME_TODAY="${TIME_NOW:8:6}"
# 或者
TIME_TODAY="${TIME_NOW:8}"      # sub_str_length為0表示到源字元串的結尾

# 取FILE_NAME中的文件名world.txt(不包括路徑), 很多童鞋會馬上想到basename, 或者一些類似於正則匹配的操作
${FILE_NAME##*/}                # 相當於basename ${FILE_NAME},即刪除按從左至右,匹配一直到最後一個/之間的子串
${FILE_NAME%/*}                 # 相當與dirname, 即刪除按從右至左方向開始,匹配到第一個/之間的子串
${FILE_NAME#*/}                 # 從左至右, 刪除第一個/及左邊的子串
${FILE_NAME%%/*}                # 從右至左, 刪除至最後一個/及右邊的子串

# 2. 字元串替換
${FILE_NAME/world.txt/hello.txt}    # 把第一個world.txt替換成hello.txt
${FILE_NAME//a/A}                   # 把所有的a替換成A

# 3. 計算字元串長度
${#FILE_NAME}                   # 計算FILE_NAME的長度
ARRAY=(abc defg hijklmn)
${#ARRAY}                       # 計算這個數組的維數
${#ARRAY[2]}                    # 計算這個數組第三個元素的長度

對於字元串的處理, 暫時能想到這麼一些了, 接觸這些東西, 也是因為偶爾會看看操作系統的一些腳本都這樣用, 感覺比較專業一些, 自己以前處理一些字元串的時候, 也會用awk/sed加上管道等等, 感覺會略顯業餘同時確實會在cpu開銷上作出一些貢獻,雖然只是些許:)
結束語:
    現在全球都在談節能減排, 我們能做些什麼呢? 數據顯示, 目前信息和通信技術領域造成的二氧化碳排放量已佔全球二氧化碳排放總量的大約2%, 在2007年,全球的電腦、印表機、手機和各種小型的IT產品共產生了8.3億噸的碳排放量,這一數字與航空業的碳排量相當。 在寫腳本的時候,如何有效使用能夠更加減少cpu的負載,如何更加能提高腳本的執行速度, 請繼續關注《我也要低碳》系列。


[火星人 ] 我也要低碳之:使用bash內部的字元串處理已經有294次圍觀

http://coctec.com/docs/program/show-post-71624.html