1、echo輸出有色及指定大小字串
echo -e "\e[0;31;1m要輸出的字串\e[0m"
echo 加上-e參數使得 \
具有了C中的printf輸出一樣的轉義功能
\e[0;31;1m為設定輸出字元為紅色31(無背景色),1m粗體
更多控制功能如下:
編碼 顏色/動作
0 重新設定屬性到預設設定
1 設定粗體
2 設定一半亮度(類比彩色顯示器的顏色)
4 設定底線(類比彩色顯示器的顏色)
5 設定閃爍
7 設定反向圖象
22 設定一般密度
24 關閉底線
25 關閉閃爍
27 關閉反向圖象
30 設定黑色前景
31 設定紅色前景
32 設定綠色前景
33 設定棕色前景
34 設定藍色前景
35 設定紫色前景
36 設定青色前景
37 設定白色前景
38 在預設的前景顏色上設定底線
39 在預設的前景顏色上關閉底線
40 設定黑色背景
41 設定紅色背景
42 設定綠色背景
43 設定棕色背景
44 設定藍色背景
45 設定紫色背景
46 設定青色背景
47 設定白色背景
49 設定預設黑色背景
其他有趣的代碼還有:
\033[2J 清除螢幕
\033[0q 關閉所有的鍵盤指示燈
\033[1q 設定“滾動鎖定”指示燈 (Scroll Lock)
\033[2q 設定“數值鎖定”指示燈 (Num Lock)
\033[3q 設定“大寫鎖定”指示燈 (Caps Lock)
\033[15:40H 把關閉移動到第15行,40列
\007 發蜂鳴生beep
2、字串判斷
if (echo "this is string test!" | grep -q '^[a-zA-Z0-9]\+$'); then
echo "字串輸入合法"
else
echo "字串輸入不合法"
fi
上面指令碼將輸出“字串輸入不合法”,因為所加的條件判斷是用來檢測字串是不是只由a-z或A-Z或0-9這些字元組成,而上面的字串裡有空格符
if (echo "12my_project" | grep -q '^[a-zA-Z]');
then
echo "工程名輸入合法"
else
echo "工程名輸入不合法"
fi
上面指令碼將輸出“工程名輸入不合法”,因為所加的條件判斷是用來檢測字串是否以字母開頭的
關於管道操作符號 | 更多
http://blog.csdn.net/cnctloveyu/article/details/4131770
關於更多grep
http://blog.csdn.net/deansrk/article/details/6628630
關於正值運算式
http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
3、在指定檔案中尋找指定內容並插入字元(模板)
(echo "/panther_config/i"; echo-e "${NEW_PROJECT_NAME}_config : unconfig\n @./mkconfig \$(@:_config=) arm omap3 ${NEW_PROJECT_NAME}\n"; echo '.';
echo 'wq') |ed Makefile
上面這句指令碼的作用是在Makefile這個檔案裡尋找panther_config字串並將模板
${NEW_PROJECT_NAME}_config : unconfig\n @./mkconfig \$(@:_config=) arm omap3 ${NEW_PROJECT_NAME}\n
插入到尋找到的字串前面,這個是我用來自動給xloader 的 Makefile增加工程用的,如下我所添加的工程名為NEW_PROJECT_NAME = zt6810,那麼由上面的指令碼將在Makefile裡產生如下內容
zt6810_config : unconfig
@./mkconfig $(@:_config=) arm omap3 zt6810
這裡用到了ed命令,更多用法
http://biancheng.dnbcw.info/shell/242647.html
4、批量替換及大小寫轉換
sed -i "s/ZT6810/`echo $NEW_PROJECT_NAME | tr [a-z][A-Z]`/g" include/configs/$NEW_PROJECT_NAME.h
上面指令碼要注意紅色所標部分 ` 是 table鍵上面的那個反單引號
上面命令可拆分成兩部分
a、字母大小寫轉換
echo $NEW_PROJECT_NAME | tr [a-z] [A-Z]
這句是將變數NEW_PROJECT_NAME中所有的小寫字母轉換成大寫,注意[a-z]與[A-Z]之間的空格符
b、sed -i .....
將a中得到的已經轉換成大寫的字串替換掉ZT6810字串
sed幾個經常用到語句:
在一個檔案的第幾行後插入新行
sed -i '第幾行i\要插入的內容' 檔案
在一檔案中指定的字元後插入內容
sed 's/指定的字元/&要插入的字元/' 檔案
替換指定的字元
sed -i 's/指定的字元/要替換的字元/' 檔案
在指定字元所在行後插入字元
sed '/指定字元/a\要插入的字元' 檔案
linux perl shell perl vi grep awk xargs 批量替換
方法1: 這兩天在構建一個應用的使用用到了maven,由於project很大,足足有700多個 pom.xml檔案,更鬱悶的是在很多pom.xml檔案裡都單獨指定了資產庫的url,我需要把這些資產庫的url統一指定到nexus本地中央庫.
手 工一個個改檔案配置有點不太實際,所以google了一下,找到批量替換檔案內容的好方法,命令結構如下:
find -name '要尋找的檔案名稱' | xargs perl -pi -e 's|被替換的字串|替換後的字串|g'下面這個例子就是將目前的目錄及所有子目錄下的所有pom.xml檔案中的”
http://repo1.maven.org/maven2“ 替換為”
http://localhost:8081/nexus/content/groups/public“.
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g'這裡用到了Perl語言,
perl -pi -e 在Perl 命令中加上-e 選項,後跟一行代碼,那它就會像運行一個普通的Perl 指令碼那樣運行該代碼.
從命令列中使用Perl 能夠協助實現一些強大的、即時的轉換。認真研究Regex,並正確地使用,將會為您省去大量的手工編輯工作。
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
方法2:
Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案中的字串。
用sed命令可以批量替換多個檔案中的 字串。
sed -i "s/原字串/新字串/g" `grep 原字串 -rl 所在目錄`
例如:我要把mahuinan替換 為huinanma,執行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
這是目前linux最簡單的批量替換字串命令了!
具體格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
執行個體代碼:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
方法3:
在議程的開發過程中,可能大家會遇到將某個變數名修改 為另一個變數名的情況,如果這個變數是一個局部變數的話,vi足以勝任,但是如果是某個全域變數的話,並且在很多檔案中進行了使用,這個時候使用vi就是 一個不明智的選擇。這裡給出一個簡單的shell命令,可以一次性將所有檔案中的指定字串進行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
from: http://blog.zol.com.cn/1395/article_1394052.html
補充說明:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
對多個檔案的處理可能不支援,需要用 xargs, 搞定。
變種如下:
grep oldString -rl /path | xargs sed -i "s/oldString/newString/g"
注意:
在 `grep oldString -rl /path` 中 ` 為1前邊的翻引號`,而不是enter
前的 '