linux shell小知識點彙總

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
linux下取前N個字符的方法:
1.) head -c 3 <<<$var
2.) cut -c 3-8,9-
3.) str=abcdefg
echo ${str:0:3}
4.) for i in `cat file`; do echo ${i:0:3};done
5.) echo abcdef |awk -F '' '{OFS="";print $1,$2,$3}'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
awk的一些用法
awk -F'/' '{print $NF}' xxx.txt //NF是域的個數,$NF是輸出最後一個域的內容
awk '/^$/ {print FNR}' xxx //打印所有空行的行號
# echo "[123][456][789]"|awk -F"[][]" 'NF=NF'
123 456 789
# echo "[123][456][789]"|awk -F"[][]" 'NF+=0'
123 456 789
$ awk 'BEGIN{FS=":"; OFS=" "; ORS="\n"} {print $1} END{print NR}' passwd
root
bin
daemon
adm
lp
5
BEGIN和END中的代碼快分別在匹配文件之前和之後執行,FS,OFS,ORS,NR都是awk的內建變量
上例的意思是將分割符設爲:,輸出分割符爲空格,換行符爲行之間的分隔符,NR代表匹配的行數
$ awk -F ":" '$3==0 {print $0 > "root.txt" }' passwd
使用重定向將結果輸出到root.txt中
$ awk -F ":" '{if($3==0){print "yes"} else {print "no"}}' passwd
yes
no
no
no
no
awk中的條件判斷語句
if(expr){statment;}else{statment;}

$ awk -F ":" '{gsub(/root/, "david"); print}' passwd
david:x:0:0:david:/david:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
使用awk的內建函數,將root替換爲david

$ awk -F ":" '$1~/root/{for (i=1; i < NF; i++) print i,$i}' passwd
1 root
2 x
3 0
4 0
5 root
6 /root
for循環語句
awk -F ":" '$1~/root/{i=1;while(i < NF){print i,$i;i++}}' passwd
使用while打印出與上面的for語句一樣的結果

$ echo 22 33 44 55 66|sed 's/ /\x27,\x27/g'
22','33','44','55','66
$ echo 22 33 44 55 66|sed "s/ /','/g"
22','33','44','55','66
註釋:sed 的替換中,對單引號的兩種處理方式。\x27代表單引號,或者sed替換中的單引號使用雙引號來代替。

$ echo = |sed 's#=#\\\=#'
\=
$ echo "'>"|sed "s/'>/\\\'>/"
\'>
$ echo ".>"|sed 's/.>/\\\.>/'
\.>
$ echo "\n"|sed 's/\\n/\\\\n/'
\\n
註釋:sed替換中對\的處理的例子。反斜槓用兩個\\註釋
 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sed的一些用法:
# echo "[123][456][789]"|sed 's/[][]/ /g'
123 456 789
# echo "abcdefg" | sed 's/[cf]/AA/g'
abAAdeAAg
註釋:表示把[]內的c和f都換成AA字符.上一個表示[]內的]和[都換成空格


本文某些例子參考來源:
http://bbs.linuxtone.org/thread-224-1-1.html
http://bbs.linuxtone.org/thread-227-1-1.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章