正则表达式,VI,SED及shell编程2010-12-05
一、
1、查看文件
cat
more/less
head ?-n 查看文件首部n行
tail?-n 查看文件尾部n行
?-f 不關(guān)閉文件,等待顯示新增進的內(nèi)容(經(jīng)常用來查看處于增長階段的日志信息)ctrl+c退出
2、正則表達式
基本正則表達式和擴展正則表達式
元字符:
.任意單個字符
[]范圍內(nèi)任意單個字符?? 如:[^abc]
*零到任意次匹配??????? .*
\{m\}m次? \{m,n\}m到n次 \{m,\}m到多次
錨定符:
^?? ?如:^root
$?? ?如:root$
\<? ?如:\<root?? \broot?? root\b??? \B
\>? ?如:root\>?? \<root\>
\(...\)? 標(biāo)記匹配到的字符,前向引用? 如: love your lover
??\(love\).*\1r
?
3、grep 全面搜索正則表達式并打印顯示
?? egrep=grep -E
?? fgrep=grep -F不把任何字符當(dāng)作元字符,只解釋其字面意義,快速匹配
grep [options] 'pattern(模式)' file
?-v?反向選取
?-i?
?-A?after-context
?-B?before-context
?-C?center-context
?--color=auto?(auto/never/always)???? export GREP_COLOR='01;32'? 01背景色3前景色2綠顏色(1-7)
注:grep -E 可支持擴展正則表達式
egrep(擴展)
?* 0到多次
?? 0或1次
?+ 1到任意次
?| 或者? 如:like your lover,love your lover--》l(ik)|(ov)e your lover
注:egrep 不支持\(...\)和\{m\}。但是使用{m}不需要\。支持(),表示字符組,如:l(ov){1,3}er
??? echo &? 可以判斷上條命令執(zhí)行成功與否(0 成功1 失敗)
??? > /dev/null“胃桶”? &> /dev/null 無論成功與否信息都放入“胃桶”
4、cut 剪切字段
?-d 以此分段
?-f 第幾段
?-c?如:-c2-6第2-6個字符
5、wc 統(tǒng)計
?-l(lines)
?-w(words)
?-m(chars)
?-c(bytes)
6、sort 排序?(緩存中保存,對原文件無影響)
?-o(output)file?將排序結(jié)果保存在file中
?-r 逆序
?-n 以數(shù)值排序 (不指定時,以ASCII排序,如:1>2)
?-f 忽略大小寫
?-u 去掉相連序重復(fù)行
?-t 分段? -k 第幾段
7、uniq 去掉相連序重復(fù)行=sort -u
?-c (count)顯示每行重復(fù)次數(shù)
?-u (unique)只顯示不重復(fù)行
?-d (repeated)只顯示重復(fù)行
如:cut -d: -f7 /etc/passwd | sort |grep -v "^$" | uniq
8、條件判斷:
test expression?????? #test 1?? -gt?? 2
[expression]?#[? 1-gt 2? ]
`expression`?#[[? 1-gt 2? ]]
條件測試:
?整數(shù)測試:
??-gt 大于????????????????? 或?? (( $A > $B ))
??-lt? 小于
??-ge 大于等于
??-le? 小于等于
??-eq 等于
??-ne 不等
?字符串測試:
??=?!=?>?<?以ASCII比較
??-z字符串長度是否為零,為零則真
??-n測試字符串是否為空,為空則假
?文件測試:
??-e FILE (exist)
??-f?(普通文件)
??-d?(目錄)
-??-r (read)?? -w(write)??? -x(可執(zhí)行)
??-h/L FILE 測試一個文件是否符號鏈接文件
??-O FILE 測試此文件屬主是否是自己
??-G FILE 屬組是否是自己所在組
組合條件測試:
-a?與
-o?或
!?非?如:[ $B -gt $A -a $B -gt $A ] ?[ ! $B -gt $A ]
短路操作符:&& ?真真則真
???? ||?有真則真? ??如:[ $B -gt $A ] && [ $B -gt $A ]
9、diff??? -u 統(tǒng)一格式輸出不同
???? patch? -pn 把第n個/之前目錄去掉? 如:
???/u/howard/src/blurfl/blurfl.c
??? -p4 后為
???? blurfl/blurfl.c?(man patch)
????????????????
diff? file1? file2?? 比較文件
diff? dir1? dir2??? 比較目錄
patch -R??? 降級補丁
如:diff vimrc vimrc1 > vimrc.patch生成補丁
??patch vimrc < vimrc.patch打補丁
10、aspell? 詞法檢查
aspell check FILE
look string 查找以string開頭的單詞
11、tr 轉(zhuǎn)換??? (不改變原文件,緩存中)?如:tr 'a-z' 'A-Z'將小寫字母轉(zhuǎn)為大寫
二、SED(stream editor流編輯器-一次處理行)非交互式編輯器,不修改原文件,在sed模式空間(緩存區(qū))中修改,
把結(jié)果輸出屏幕,可使用重定向保存結(jié)果。還支持sed腳本。
如:sed???? '/root/p'????? /etc/passwd??搜索/root并打印出來
????? sed -n '/root/p'????? /etc/passwd??只顯示匹配到并處理過的內(nèi)容
?????????? p????打印行
?????????? d????刪除行
?? s?????? g????s用一個字符串替換另一個(默認只替換每行第一個)
??????sed 's/A/B/g'??? A可以使用模式,但B不能。g表示全局(globle)? i 忽略大小寫
?? 1,5s????指定地址范圍一至五行?1,$s?1至最后一行
???? ???????如:/root/,/student/s/root/ROOT/?????? 從/root/行到/student/行
?????????? -i?????直接修改原文件
?????????? -e?????同時指定多個應(yīng)用條件?如:sed -e 's/file/FILE/g'? -e? 's/enabled/ENABLED/g'
?????????? -f?????從文件中讀取條件并應(yīng)用?如:sed -f? sed.txt? server.repo?? (sed.txt文件中條件不加'')
?????????? a \????在匹配到的行下添加一行
?????????? i? \????在匹配到的行上添加一行???????? 如:sed '/enabled=0/a \A=1\nB=2'? 在enabled=0后再添兩行
?????
??
注:1、任何符號都可以做分隔符,如:?? s/ftp:\/\/com\/pub/file:\/\/\/media\/g可以寫成
?sAftp://com/pubAfile:///mediaAg???? (以A來做分隔符,但此行未出現(xiàn)這個字符)?
2、s/r..t/R..T/g------->s/r\(..\)t/R\1T/g ??
3、例:s/root/rootable/g------>s/root/&able/g ? &用來代替/root/?
????? ????
三、1.nano、emacs
2.vi/vim? 模式化編輯器:命令模式、輸入模式、末行模式
:w /root/file
ZZ 保存退出
vim?? +10?? file
vim?? +/redhat?? file
光標(biāo)移動:h左,j下,k下,l右
行內(nèi)移動:^,0,$
單詞為單位:w(word),b,e(end)
行間:nG????? 末行模式也支持:n
句間跳轉(zhuǎn):()
段間跳轉(zhuǎn):{}
i(insert)/I??? a(append)/A?? o/O
刪除組合:c$?? c0? C
替換r/R
刪除x/X? d/D? ndd
復(fù)制yy /Y
粘貼p/P
u(undo)撤銷最近一次
U批量撤銷
ctrl+r 撤銷上一次撤銷
.(redo)重做
粘最近一次操作,緩存中有最后一次
:.,+100d? 刪除當(dāng)前行向下100行
:.,&-1d
%全文
v可視模式
V矩形模式
/pattern
?pattern???? n?? N
/\<pro[^[:space:][:punct:]]*\>
/\$[[:upper:]]\{1,\}
查找并替換:
:addr1,addr2s///gi
:%s/\<redhat\>/REDHAT/gi
例:
#? fjsldfjlsdjflasjf
#fkdsj? sdjfksdjf
???? #ljfsjflksdj
????? lsjdfkjsldjf?? #lsdjfskdjfl
sflsjdfjsdlfj
:%s/^#//g
:%s/^#//g
:%s/^[[:space:]]*#[[:space:]]*//g
:%s/^[[:space:]]*#[[:space:]]*.*$//g
:%s/^\(\([[:space:]]\)*[^[:space:]]\{1,\}\2\)#.*/\1/g
vim a b c???? :next? :prev? :first? :last一次打開多個文件
vim -o? a b c?? 一次打開多個水平窗口 :close
vim -O? a b c? 一次打開多個垂直窗口 :vsplit??
定制vim顯示特征:
set nu?編輯文件~/.vimrc??? set nu
set autoindent自動縮進
set ignorecase
set showmatch
四、shell算術(shù)運算:
$((expression))? 或 $[expression]
如:
$[$A+$B]??$(($A+$B))?let A=$B+$C
let A=$A+$B------->?let A+=$B
+,-,\*,/,%,++,--,+=
五、流程控制語句
1、選擇分支:
1)單分支?
if [];then
?..
fi
2)雙分支:
if [];then
?..
else
?..
fi
3)多分支:(條件不能重疊,但可以嵌套。)
if [];then
..
elif [];then
..
elif [];then
..
else ..
fi
例:if cut -d: -f1 /etc/passwd | grep "^$1$" &> /dev/null ; then
?echo "$1 is there."
????? else
?echo "$1 is not there."
????? fi
2、循環(huán)分支:
while
for
until
1)for VAR in list; do
..
..
done
如:
let SUM=0
for I in $(seq 1 100); do?????? //for I in {1,100}; do
?let SUM+=$I
done
echo "The sum is: $SUM."
例:ping 教室中每個主機,成功則在線,否則不在線
-c 發(fā)幾個ping包
-W 間隔時間,超時
for I in {1..254}; do
?if ping -c1 -W2 192.168.0.$I &> /dev/null ; then
?echo "$I is online."
?else
?echo "$I is offline."
fi
done
例:
cd /var
for I in ./* ; do
?file $I
done
2)while []; do
...
done滿足則循環(huán),不滿足則不循環(huán)
while read LINE; do
...
done < /etc/issue
cat /etc/issue|while read LINE; do
..
done
?
例:
let I=1
let SUM=0
while [ $I -le 100 ]; do
?let SUM+=$I
?let I++
done
echo "sum is $SUM."
?
3)until [];do??? 條件不滿足則執(zhí)行,與while相反
...
done
注:面向?qū)ο缶幊?#xff1a;順序、選擇、循環(huán)
read A B? 通過輸入讀取并保存在變量里
例:
echo "Please input an integer:"
read A
echo "Please input an integer:"
read B
echo "The sum is $[$A+$B]."
或
read -p "Please input an integer:" A
read -p "Please input an integer:" B
echo "The sum is $[$A+$B]."
sleep 5 用來讓循環(huán)體睡眠幾秒鐘后在運行
?
轉(zhuǎn)載于:https://blog.51cto.com/negiup/455859
總結(jié)
以上是生活随笔為你收集整理的正则表达式,VI,SED及shell编程2010-12-05的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何把你的Windows PC变成瘦客户
- 下一篇: 思科虚拟化与视频技术打造协作新体验