一、系統常見特殊符號
1、基礎符號系列
1)$
①普通用戶命令行提示符
[sangha@hasang02-01 ~]$
②在awk中,$1表示第一列
awk '{print $1}' test.txt
③取出變量的內容
echo $LANG
2)!
①取反或排除
awk '!/xiang/' test.txt
find -type f ! -name "*.txt"|xargs ls -l
②命令行中表示取出最近命令
!awk(不建議用)== history|grep awk
3)|
管道
4)#
①root用戶命令提示符
[root@hasang02-01 ~]#
②注釋
2、引號符號系列
1)單引號:' '
輸入什么,就輸出什么
2)雙引號:" "
類似單引號,單部分內容會被解析
3)反引號:` `
執行引號里面的命令,用於其他命令調用,同$()
3、定向符號系列
1)小於符號:<
①一個小於號:標准輸入重定向
xargs -n2 < test.txt --- 把文件里的內容按兩個一行顯示
②兩個小於號:標准輸入重定向
用於一次性向文件中寫入多行內容
2)大於符號:>
①一個大於號:標准輸出重定向(會清空原文件內容)
echo "abc" >test.txt
②兩個大於號:標准輸出追加重定向(追加到文件最后一行)
echo "abc" >>test.txt
3)錯誤重定向:2>
①錯誤輸出重定向:ifconfi 2>test.txt
②錯誤輸出追加重定向:ifconfi 2>>test.txt
③把錯誤的正確的都追加輸入到指定文件:ifconfig &>>test.txt 或 ifconfg >>test.txt 2>&1
4、路徑信息系列
1)點:.
①表示當前目錄:cd .
②加載(==source):. /etc/profile
2)點點:..
表示上一層目錄:cd ..
3)波浪線:~
表示當前用戶家目錄:cd ~
5、邏輯符號系列
1)兩個and符號:&&
前面的命令執行成功,再執行后面的命令
2)兩根豎線:||
前面的命令執行不成功,才執行后面的命令
3)分號: ;
分別執行兩個命令
二、通配符
通配符多用於處理文件名稱信息,find ls -l 常用
1、星號:*
表示匹配所有內容
示例1:找出以.txt結尾的文件
find /test -type f -name "*.txt"
示例2:找出包含字符串test的文件
find /test -type f -name "*test*"
示例3:找出以test開頭.txt結尾的文件
find /test -type f -name "test*.txt"
2、大括號:{}
表示構造出一個序列
①單個連續序列
echo {1..10} ; echo {a..z}
②單個不連續序列
echo {1..10..2} == echo {1,3,5,7,9,}
③多個連續序列
echo {1..3}{1..3}
④多個不連續序列
echo {1,3,4}{2,3}
⑤單個字符串和序列組合
echo A{A,B} ; echo A{,B}
示例1:一次性創造多個文件
touch stu{1..10}.txt
示例2:文件備份
copy test.txt{,.bak}
三、基礎正則表達式(basic regular expression BRE)
正則表達式多用於處理文件內容信息,三劍客命令和各種計算機語言常用
1.尖號:^
表示以什么開頭的信息:grep '^m' test.txt
2.美元符號:$
找出以什么結尾的信息:grep 'm$' test.txt
3.尖號加美元符號:^$
匹配空行信息:grep -v '^$' test.txt
4.一個點:.
匹配任意一個且只有一個字符信息(不能匹配空行):grep -o '.$' test.txt
5.星號:*
匹配0個或多個連續出現的字符信息,會匹配出找不到的內容,預支匹配,默認將所有內容顯示出來:grep '0*' test.txt
6.點星:.*
匹配文件中所有的內容(可以匹配空行信息):grep '.*' test.txt
①找出文件以m開頭,一行中的所有信息:grep '^m.*' test.txt
②找出文件以m開頭,以m結尾的信息:grep '^m.*m$' test.txt
7.轉譯符號:\
可以將有意義的符號,轉譯成沒有意義的符號,也可以將沒有意義的符號,轉譯成有意義的符號。
①找出以.結尾的行的信息:grep '\.$' test.txt
②將文件一行信息,轉換成一列顯示:tr " " "\n" <test.txt
8.中括號:[abc]
表示分別匹配中括號里的內容,即匹配a或b或c:grep '[abc]' test.txt
示例1:找出不包含數字或大寫字母的行:grep -v '[0-9A-Z]' test.txt
9.中括號加尖號:[^abc]
排除/不匹配指定字符信息:grep '[^abc]' test.txt
示例1:找出不以a或b或c開頭的行
grep '^[^abc]' test.txt
示例2:找出不以空格結尾的行
grep '[^ ]$' test.txt
四、擴展正則表達式(extended regular expression ERE)
1.加號:+
+前面字符出現一次或一次以上,只顯示包含對應字符串的行(對比*)
egrep '[0-9]+' test.txt
2.豎線:|
匹配多個滿足條件的信息:egrep 'a|b|c' test.txt
3.小括號:()
匹配一個整體信息:grep 'a(b|c)d' test.txt
后項引用前面括號里的內容(多與sed連用):echo 123456|sed 's#(..)(..)(..)#<\2><\3><1>#g'
4.大括號:{}
指定匹配前面一個字符出現了多少次
1){n,m} :指定前面一個字符連續最少出現n次,最多出現m次
2){n}:指定前面一個字符連續出現了n次
3){n,}:指定前面一個字符連續出現了最少n次
4){,m}:指定前面一個字符連續出現了最多m次
5.問號:?
匹配前一個字符出現了1次或0次:egrep 'a?' test.txt
五、基礎正則表達式和擴展正則表達式的區別
基礎正則命令:grep sed awk
擴展正則命令:egrep sed -r awk
如果一定要用基礎正則命令來使用擴展正則表達式的話,必須在擴展正則表達式前面加上轉譯符 \
如:grep 'a\|b' test.txt ; sed -n "/3306\|1521/p" /etc/services