目錄
- 管道
- 正則表達式
- grep
- sed
- awk
一、什么是管道
- Linux提供管道符“
|
”將兩個命令隔開拼坎,管道符左邊命令的輸出就會作為管道符右邊命令的輸入
- 示例:
echo "hello123" | grep "hello"
二、正則表達式
-
正則表達式就是記錄文本規(guī)則的代碼
- 演練環(huán)境:https://tool.oschina.net/reqex
舉例
-
找出所有的
hi
單詞\bhi\b
-
hi
單詞后面有lucy
單詞\bhi\b.*\blucy\b
-
以
0
開頭完疫,然后是兩個數(shù)字泰鸡,然后是一個連字號“_”
,最后是8個數(shù)字0\d{2}-\d{8}
常用元字符
常用限定符
實戰(zhàn)
- 匹配以字母a開頭的單詞 ——
\ba\w*\b
- 匹配剛好6個字符的單詞 ——
\b\w{6}\b
- 匹配1個或更多連續(xù)的數(shù)字 ——
\d+
- 5位到12位QQ號 ——
^\d{5,12}$
三壳鹤、grep命令
定義
- 根據(jù)用戶指定的模式(pattern) 對目標文本進行過濾盛龄,顯示被模式匹配到的行
命令形式
grep [OPTIONS] PATTERN [FILE...]
選項
-
-v
顯示不被pattern匹配到的行 -
-i
忽略字符大小寫 -
-n
顯示匹配的行號 -
-c
統(tǒng)計匹配的行數(shù) -
-o
僅顯示匹配到的字符串 -
-E
使用ERE,相當于egrep
實戰(zhàn)1
- 查找文件內(nèi)容包含root的行數(shù)
grep -n root test.txt
- 查找文件內(nèi)容不包含root的行
grep -nv root test.txt
-
test.txt 內(nèi)容
-
實戰(zhàn)
實戰(zhàn)2-使用正則
四芳誓、sed 命令
定義
-
sed是流編輯器余舶,一次處理一行內(nèi)容
- 將行存儲在模式空間
- sed命令進行處理
- 送入屏幕
- 清空模式空間
- 重復1-4直到所有行被處理完
命令形式
sed [-hn..][-e<script>][-f<script FILE>][FILE]
命令解析
-
sed [-hn.][-e<script>][-f<script文件>][文本文件]
-
-h
顯示幫助 -
-n
僅顯示script處理后的結果
-
-
sed [-hnV][-e<script>][-f<script文件>][文本文件]
-
-e<script>
以選項中指定的script來處理輸入的文本文件 -
-f<script文件>
以選項中指定的script文件來處理輸入的文本文件
-
常用動作
- a:新增
sed -e '4 a newline'
:在第四行后面新增一行“newline”
- c:取代
sed -e '2,5c No 2-5 number'
:用c
后面的內(nèi)容“No 2-5 number”
取代2-5行的內(nèi)容 - d:刪除
sed -e '2,5d'
:刪除2-5行 - i:插入
sed -e '2i newline'
:在第二行前面插入一行“newline”
- p:打印
sed -n '/root/p'
:打印匹配到root
規(guī)則的內(nèi)容,/
之間的內(nèi)容是使用正則 - s:取代
sed -e 's/old/new/g'
:后面的內(nèi)容new
取代前面的內(nèi)容old
锹淌,g
代表全局global
實戰(zhàn)1
- 查看幫助
-
man sed
-
k
:往上翻 -
j
:往下翻 -
/內(nèi)容
:查找指定內(nèi)容 -
n
:查找下一個匹配到的內(nèi)容 -
N
:查找上一個匹配到的內(nèi)容
-
sed -h
-
- 在第四行后添加新字符串
sed -e '4 a newline testfile' test.txt
-e
可以省略
實戰(zhàn)2
- 在第二行后加上newline
sed '2a drink tea' test.txt
- 在第二行前加上newline
-
sed '2i drink tea' test.txt
-
實戰(zhàn)3
- 全局替換
sed -e 's/root/hello/g' test.txt
- 直接修改文件內(nèi)容
-
sed -i 's/root/hello/g' test.txt
-
注意點
-
sed不會修改原文件匿值,只會在模式空間中修改
-
要修改原文件需要加上
-i
參數(shù),這里的-i
與常用動作中的i
不是一回事
五葛圃、awk 命令
定義
-
把文件逐行的讀入千扔,以空格為默認分隔符將每行切片,切開的部分再進行后續(xù)處理
- 將第一行作為輸入,并賦值給內(nèi)置變量
$0
- 進行切段库正,比如
hello hello hello
通過空格進行切段曲楚,第一段為$1
,第二段為$2
褥符,以此類推 - 對行匹配進行正則或執(zhí)行其他動作
- 打印內(nèi)容
- 讀取第二行內(nèi)容龙誊,重復1-4步驟
命令形式
awk 'pattern + action' [FILE]
命令解析
-
awk 'pattern + action' [filenames]
-
-pattern
正則表達式 -
-action
對匹配到的內(nèi)容執(zhí)行的命令(默認為輸出每行內(nèi)容)
-
常用參數(shù)
-
FILENAME
awk瀏覽的文件名 -
BEGIN
處理文本之前要執(zhí)行的操作 -
END
處理文本之后要執(zhí)行的操作 -
FS
設置輸入域分隔符,等價于命令行-F
選項喷楣,默認為空格 -
NF
瀏覽記錄的域的個數(shù)(列數(shù)) -
NR
已讀的記錄數(shù)(行數(shù)) -
OFS
輸出域分隔符 -
ORS
輸出記錄分隔符 -
RS
控制記錄分隔符趟大,指定換行符,默認為\n
-
$0
整條記錄 -
$1
表示當前行的第一1 個域...以此類推
實戰(zhàn)1
- 搜索/etc/passwd有root關鍵字的所有行铣焊,并顯示對應的shell
awk -F: '/root/{print $7}' /etc/passwd
- 打印/etc/passwd/的第二行信息
-
awk -F: 'NR==2{print $0}' /etc/passwd
-
實戰(zhàn)2
-
使用begin加入標題
-
awk ‘BEGIN {print“BEGIN”,“BEGIN”}{print $1,$2}' /etc/passwd
-
-
自定義分割符
-
echo "111 222|333 444|555 666" | awk 'BEGIN{RS="l"}{print $0}'
-