linux echo, sort, sed是初學linux shell script 的一些常用的命令。基本上來說,如果能夠掌握了這些命令,我們就能寫出一些不錯的linux腳本。以下是我遇到的以下常用的echo,sort, sed等命令的一些應用;
1. echo -e: BW="f25\nf50\nf75\nf100\n";
如果直接echo $BW, 結果是f25\nf50\nf75\nf100\n。所以我們必須加上-e選項才能實現換行的目的,即echo -e $BW
2. sort 排序: BW=`echo -e $BW|sed 's/f/f /g'|sort -ugk2|sed 's/ //g'`;
sed 's/f/f /g': 人為制造一個分隔符“ ”出來
sort -u:清除重復行
-g: 按照數字大小排序: 一般來說, 假如有五個數: 1 3 11 12 21, 它會按照第一個數的大小來排,即1 11 12 21 3, 加-g 或-n 之后,就會正常排序, 即1 3 11 12 21
-k: 一般和-t一起用, -t 是分隔符,默認為空格,sort-ugk2 其實是 sort -u -t " " -k2 -g。其中-k2, 是指按照分割符后面的值得大小排序
sed 's/ //g': 刪除分隔符
Note: sort [-bcfMnrtk][源文件][-o 輸出文件]
補充說明:sort可針對文本文件的內容,以行為單位來排序。
參 數:
-b 忽略每行前面開始出的空格字符。
-c 檢查文件是否已經按照順序排序。
-u 除去重復行
-f 排序時,忽略大小寫字母。
-M 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。compare according to string numerical value
-g compare according to general numerical value
-o<輸出文件> 將排序后的結果存入指定的文件。
-r 以相反的順序來排序。
-R random排序
-t<分隔字符> 指定排序時所用的欄位分隔字符。
-k 選擇以哪個區間進行排序。
參考:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html
3. sed: cat Runlist.txt | sed 's/^#.*//g'|sort -R;
假如Runlist.txt里面的內容是:
test_short/test_UL_CellID
test_short/test#_UL_DL_cfg .2
test_short/test_UL_MCS
#test_short/test_UL_RNTI in the adb list
cat Runlist.txt | sed 's/^#.*//g'|sort -R: 那么這句話是把以#開頭的一行刪除。
test_short/test_UL_CellID
test_short/test#_UL_DL_cfg .2
test_short/test_UL_MCS
cat Runlist.txt | sed 's/#.*//g'|sort -R: 那么這句話是把以#后面的內容刪除。
test_short/test_UL_CellID
test_short/test_UL_MCS
test_short/test#
cat Runist.txt | sed '/#/d': 刪除#出現的那一行
test_short/test_UL_CellID
test_short/test_UL_MCS
3a. 匹配數據,然后進行操作
只需要在上述的基礎上加上正則匹配
sed "/匹配的模式/處理的方式" file.txt
sed "/^root/d" file.txt 對開始有root的刪除
cat Runist.txt | sed '/#/s/test_short/bugs/g/': 找到#出現的那一行,然后用bugs替換test_short
3b. 一個比較有趣的例子: 如何替換\n也就是把所有的行都歸為一行
我們可以用tr來代替sed去做這件事情: tr "\n" " ": 用空格把 \n換行替代
Note: sed [-nefr] [動作] 文件
參數:
-n 安靜模式,在sed處理的時候,所有來自STDIN的數據都會被輸出到終端,加上-n會只輸出處理的哪行
-e 直接在命令列上進行sed動作編輯
-f 直接將sed的動作寫在文件內
-r sed動作支持延伸的正則表達(默認只是基礎正則)
-i 直接修改文件內容(慎用,尤其是用系統文件做練習的時候)非常有用,不加這個選項,只會在屏幕中print出來
動作:
a append:增加,在當前行的下一行增加
c :取代,取代n1到n2之間的行
d delete:刪除
i 插入,目前行的上一行插入
p 打印,常常與-n使用
s 取代,s/old/new/g
http://blog.csdn.net/hello_hwc/article/details/40118129
3c. 32 bit 轉換到8bit
$cat test.txt
ab1acd33
11dd1232
$ sed -i 's/../& /g' test.txt
$ cat test.txt
ab 1a cd 33
11 dd 12 32
$ sed -i '/^$/d' test.txt
$ cat test.txt
ab
1a
cd
33
11
dd
12
32