Linux echo, sort, sed 等一些命令總結


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

 
Note:echo -e 處理特殊字符
若字符串中出現以下字符,則特別加以處理,而不會將它當成一般文字輸出:
\a 發出警告聲;
\b 刪除前一個字符;
\c 最后不加上換行符號;
\f 換行但光標仍舊停留在原來的位置;
\n 換行且光標移至行首;
\r 光標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
\\ 插入\字符;
\nnn 插入nnn(八進制)所代表的ASCII字符;

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM