1、總結(jié)學(xué)過(guò)的文本處理工具,文件查找工具,文本處理三劍客, 文本格式化命令(printf)的相關(guān)命令及選項(xiàng),示例。
- cat
-E:顯示行結(jié)束符$
-A:顯示所有控制符
-n:對(duì)顯示的每一行進(jìn)行編號(hào)
-b:非空行編號(hào)
-s:壓縮連續(xù)的空行成一行
- nl
相當(dāng)于cat -b - tac
逆向顯示文本內(nèi)容 - rev
將同一行的內(nèi)容逆向顯示 - head
可以顯示文件或標(biāo)準(zhǔn)輸入的前面行
-c # 指定獲取前#字節(jié)
-n # 指定獲取前#行,#如果為負(fù)數(shù),表示從文件頭取到的倒數(shù)第#前
-# 和-n #一樣
- tail
查看文件或標(biāo)準(zhǔn)輸入的倒數(shù)行
-c # 指定獲取后#字節(jié)
-n # 指定獲取后#行,#如果為負(fù)數(shù),表示從開(kāi)頭第#行到文件結(jié)束
-# 和-n #一樣
-f 跟蹤顯示文件fd新追加的內(nèi)容,常用于日志監(jiān)控,相當(dāng)于--follow=descriptor,當(dāng)文件刪除再新建同名文件,將無(wú)法繼續(xù)跟蹤文件
-F 跟蹤文件,相當(dāng)于--follow=name --retry,當(dāng)文件刪除再新建同名文件,將可以繼續(xù)跟蹤文件
- cut
-d:指明分隔符
-f:
#:第#個(gè)字段,例如:3
#,#:離散的多個(gè)字段,例如:1,3,6
#-#:連續(xù)的多個(gè)字段,例如1-6
-c:按字符切割
--output-delimiter=string 指定輸出分隔符
- paste
合并多個(gè)文件同行號(hào)的到一行
-d #分隔符:指定分割符,默認(rèn)用tab
-s:所有行合成一行顯示
- wc
wc命令可以用于統(tǒng)計(jì)文件的行總數(shù),單詞總數(shù),字節(jié)總數(shù)和字符總數(shù),可以對(duì)文件或stdin中的數(shù)據(jù)統(tǒng)計(jì)
-l:只記數(shù)行數(shù)
-w:只計(jì)數(shù)單詞總數(shù)
-c:只計(jì)數(shù)字節(jié)總數(shù)
-m:只計(jì)數(shù)字符總數(shù)
-L:顯示文件中最長(zhǎng)行的長(zhǎng)度
- sort
把整理過(guò)的文本顯示在stdout中,不改變?cè)嘉募?/li>
-r 執(zhí)行反方向(右上到下)整理
-R 隨機(jī)順序
-n 執(zhí)行數(shù)字大小整理
-h 按照人類(lèi)可讀排序如:2k 1G
-f 選項(xiàng)忽略字符串中的字符大小寫(xiě)
-u 合并重復(fù)項(xiàng),去重
-t c 使用c做字段界定符
-k # 按照使用c為字符分割的#列來(lái)整理,能夠使用多次
- uniq
從輸入中刪除前后相接的重復(fù)的行
-c 顯示每行重復(fù)出現(xiàn)的次數(shù)
-d 僅顯示重復(fù)過(guò)的行
-u 僅顯示不曾重復(fù)的行
- diff
diff命令比較兩個(gè)文件中的區(qū)別
-u 輸出統(tǒng)一的unified的格式文件,適用于補(bǔ)丁文件
- grep
常見(jiàn)選項(xiàng)
--color=auto 對(duì)匹配到的文本著色顯示
-m # 匹配#次后停止
-v 顯示不被pattern匹配到的行
-i 忽略大小寫(xiě)
-n 顯示匹配的行號(hào)
-c 統(tǒng)計(jì)匹配的行數(shù)
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
-A # after,后#行
-B # before,前#行
-C # context,前后各#行
-e 實(shí)現(xiàn)多個(gè)選項(xiàng)間的邏輯
-w 匹配整個(gè)單詞
-E 使用ERE,相當(dāng)于egrep
-f file 根據(jù)模式文件處理,如:grep -f t1.txt t2.txt找出兩個(gè)文件相同的內(nèi)容
-r 遞歸處理,但不處理軟鏈接
-R 遞歸處理,但處理軟鏈接
- sed
常用選項(xiàng)
-n 不輸出模式空間到屏幕,即不自動(dòng)打印
-e 多點(diǎn)編輯
-f file 從指定文件中讀取編輯腳本
-r 使用擴(kuò)展正則表達(dá)式
-i.bak 備份文件并原處編輯
script命令格式 '地址命令'
地址格式:
1、不給地址,對(duì)全文進(jìn)行處理
2、單地址:
#:指定的行
$:最后一行
/pattern/:被此模式所能夠匹配到的每一行
3、地址范圍:
#,# 從#行到第#行,3,6 從第3行到第6行
#,+# 從#行到+#行,3,+4 表示從3行到第7行
/part1/,/part2/
#,/part/
/part/,#
4、步進(jìn):~
1~2 奇數(shù)行
2~2 偶數(shù)行
命令:
p 打印當(dāng)前模式空間內(nèi)容,追加到默認(rèn)輸出之后
Ip 忽略大小寫(xiě)輸出
d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
a [\]text 在指定行后面追加文本,支持使用\n實(shí)現(xiàn)多行追加
i [\]text 在行前面插入文本
c [\]text 替換行為單行或多行文本
w file 保存模式匹配的行至指定文件
r file 讀取指定文件的文本至模式空間中匹配到的行后
= 為模式空間中的行打印行號(hào)
! 模式空間中匹配行取反處理
q 結(jié)束或退出sed
查找替換
s/pattern/string/修飾符 查找替換,支持使用其它分隔符,可以是其它形式:s@@@,s###
g 行內(nèi)全局替換
p 顯示替換成功的行
w /PATH/FILE 將替換成功的行保存至文件中
I,i 忽略大小寫(xiě)
2、總結(jié)文本處理的grep命令相關(guān)的基本正則和擴(kuò)展正則表達(dá)式。
- 基本正則
字符匹配
. #匹配任意單個(gè)字符(除了\n)可以是漢字或其他國(guó)家文字
[] #匹配指定范圍內(nèi)的任意單個(gè)字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] #匹配指定范圍外的任意單個(gè)字符,示例:[^wang]
[:digit:] #任意數(shù)字,相當(dāng)于0-9
[:lower:] #任意小寫(xiě)字母,表示a-z
[:upper:] #任意大寫(xiě)字母,表示A-Z
[:alpha:] #任意大小寫(xiě)字母
[:alnum:] #任意數(shù)字或字母
[:blank:] #水平空白字符
[:space:] #水平或垂直空白字符
[:punct:] #標(biāo)點(diǎn)符號(hào)
[:print:] #可打印字符
[:cntrl:] #控制(非打印)字符
[:graph:] #圖形字符
[:xdigit:] #十六進(jìn)制字符
匹配次數(shù)
要用在指定次數(shù)的字符后面,用于指定前面的字符要出現(xiàn)的次數(shù)
* #匹配前面的字符任意次數(shù),包括0次,盡可能長(zhǎng)的匹配
.* #任意長(zhǎng)度的任意字符
\? #匹配其前面的字符出現(xiàn)0次或1次,即:可有可無(wú)
\+ #匹配其前面的字符出現(xiàn)最少1次,即>=1
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次,>=n
位置錨定
用于定位出現(xiàn)的位置
^ #行首錨定,用于模式的最左側(cè)
$ #行尾錨定,用于模式的最右側(cè)
^PATTERN$ #用于模式匹配整行
^$ #空行
^[[:space:]]*$ #空白行
\<或\b #詞首鎖定,用于單詞模式的左側(cè)
\>或\b #詞尾鎖定,用于單詞模式的右側(cè)
\<PATTERN\> #匹配整個(gè)單詞
分組
分組:用()將多個(gè)字符捆綁在一起,當(dāng)作一個(gè)整體處理
后向引用:分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式記錄在內(nèi)部的變臉中,這些變量的命名方式為:\1,\2,\3,.....
注意:\0表示正則表達(dá)式中匹配所有的字符
\(A\(B\)\)
\1:A\(B\)
\2:B
或者
或者:a\ |b
示例:
a\|b #a或b
C\|cat #C或cat
\(C\|c\)at #Cat或cat
- 擴(kuò)展正則表達(dá)式元字符
字符匹配
. #匹配任意單個(gè)字符(除了\n)可以是漢字或其他國(guó)家文字
[] #匹配指定范圍內(nèi)的任意單個(gè)字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] #匹配指定范圍外的任意單個(gè)字符,示例:[^wang]
[:digit:] #任意數(shù)字,相當(dāng)于0-9
[:lower:] #任意小寫(xiě)字母,表示a-z
[:upper:] #任意大寫(xiě)字母,表示A-Z
[:alpha:] #任意大小寫(xiě)字母
[:alnum:] #任意數(shù)字或字母
[:blank:] #水平空白字符
[:space:] #水平或垂直空白字符
[:punct:] #標(biāo)點(diǎn)符號(hào)
[:print:] #可打印字符
[:cntrl:] #控制(非打印)字符
[:graph:] #圖形字符
[:xdigit:] #十六進(jìn)制字符
次數(shù)匹配
* #匹配前面的字符任意次數(shù),包括0次,盡可能長(zhǎng)的匹配
.* #任意長(zhǎng)度的任意字符
? #匹配其前面的字符出現(xiàn)0次或1次,即:可有可無(wú)
+ #匹配其前面的字符出現(xiàn)最少1次,即>=1
{n} #匹配前面的字符n次
{m,n} #匹配前面的字符至少m次,至多n次
{,n} #匹配前面的字符至多n次,<=n
{n,} #匹配前面的字符至少n次,>=n
位置錨定
^ #行首錨定,用于模式的最左側(cè)
$ #行尾錨定,用于模式的最右側(cè)
^PATTERN$ #用于模式匹配整行
^$ #空行
^[[:space:]]*$ #空白行
\<或\b #詞首鎖定,用于單詞模式的左側(cè)
\>或\b #詞尾鎖定,用于單詞模式的右側(cè)
\<PATTERN\> #匹配整個(gè)單詞
分組其他
() #分組
| #或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat
3、總結(jié)變量命名規(guī)則,不同類(lèi)型變量(環(huán)境變量,位置變量,只讀變量,局部變量,狀態(tài)變量)如何使用。
- 命名要求
區(qū)分大小寫(xiě)不能使程序中的保留字和內(nèi)置變量:如:if,for
只能使用數(shù)字、字母及下劃線,且不能以數(shù)字開(kāi)頭,不支持短橫線
變量名大寫(xiě)
局部變量小寫(xiě)
函數(shù)名小寫(xiě)
大駝峰StudentFirstName,由多個(gè)單詞組成,且每個(gè)單詞的首字母是大寫(xiě),其它小寫(xiě)
小駝峰studentFirstName,由多個(gè)單詞組成,第一個(gè)單詞的首字母小寫(xiě),后續(xù)每個(gè)單詞的首字母是大寫(xiě),其它小寫(xiě)
下劃線:student_name - 環(huán)境變量
可以使子進(jìn)程(包括孫子進(jìn)程)繼承父進(jìn)程的變量,但是無(wú)法讓父進(jìn)程使用子進(jìn)程的變量一旦子進(jìn)程修改從父進(jìn)程繼承的變量,將會(huì)新的值傳遞給孫子進(jìn)程.
export name=VALUE - 位置變量
位置變量:在bash shell中內(nèi)置的變量,在腳本代碼中調(diào)用通過(guò)命令行傳遞給腳本的參數(shù)
$1,$2, ….. 對(duì)應(yīng)第1個(gè)、第2個(gè)等參數(shù)
$0命令本身,包括路徑
$*傳遞給腳本的所有參數(shù),全部參數(shù)合為一個(gè)字符串
$@傳遞給腳本的所有參數(shù),每個(gè)參數(shù)為獨(dú)立字符串
$#傳遞給腳本的參數(shù)的個(gè)數(shù) - 只讀變量
只讀變量:只能聲明定義,但后續(xù)不能修改和刪除,即常量
聲明只讀變量:
readonly name
查看只讀變量:
readonly -p - 局部變量
定義在函數(shù)內(nèi)部的變量 - 狀態(tài)變量
進(jìn)程執(zhí)行后,將使用變量$?保存狀態(tài)碼的相關(guān)數(shù)字,不同的值反應(yīng)成功或失敗,$?取值范例0-255
$?的值為0 #代表成功
$?的值是1到255 #代表失敗
在腳本中使用以下命令自定義退出狀態(tài)碼
exit [n]
4、通過(guò)shell編程完成,30雞和兔的頭,80雞和兔的腳,分別有幾只雞,幾只兔?
答:rabbit=10 chicken=20
#!/bin/bash
foot=80
head=30
rabbit=$[$[foot-head-head]/2]
chicken=$[head-rabbit]
echo rabbit=$rabbit chicken=$chicken
#!/bin/bash
ch=2
ra=4
head=30
feet=80
for i in {1..29};do
if [ $[$[i*ra]+$[$[head-i]*ch]] -eq $feet ] ;then
echo rabbit=$i chicken=$[head-i]
fi
done
5、結(jié)合編程的for循環(huán),條件測(cè)試,條件組合,完成批量創(chuàng)建100個(gè)用戶(hù),
1)for遍歷1..100
2)先id判斷是否存在
3)用戶(hù)存在則說(shuō)明存在,用戶(hù)不存在則添加用戶(hù)并說(shuō)明已添加。
#!/bin/bash
name=user
for i in {1..100};do
id $name$i &> /dev/null
if [ $? -eq 0 ];then
echo "$name$i 已存在"
else
useradd -d /home/$name$i -s /bin/bash $name$i && echo "$name$i 已創(chuàng)建"
fi
done
6、磁盤(pán)存儲(chǔ)術(shù)語(yǔ)總結(jié): head, track, sector, sylinder.
head-磁頭 track-磁道 sector-扇區(qū) sylinder-柱面
7、總結(jié)MBR,GPT結(jié)構(gòu)。
- MBR: 使用32位表示扇區(qū)數(shù),分區(qū)不超過(guò)2T
0磁道0扇區(qū):512bytes
446bytes: boot loader 啟動(dòng)相關(guān)
64bytes:分區(qū)表,其中每16bytes標(biāo)識(shí)一個(gè)分區(qū)
2bytes: 55AA,標(biāo)識(shí)位
MBR分區(qū)中一塊硬盤(pán)最多有4個(gè)主分區(qū),也可以3主分區(qū)+1擴(kuò)展(N個(gè)邏輯分區(qū))
MBR分區(qū):主和擴(kuò)展分區(qū)對(duì)應(yīng)的1 -- 4,/dev/sda3,邏輯分區(qū)從5開(kāi)始,/dev/sda5 - GPT: 支持128個(gè)分區(qū),使用64位,支持8Z(512Byte/block )- 64Z (4096Byte/block)
使用128位UUID(Universally Unique Identifier)表示磁盤(pán)和分區(qū)GPT分區(qū)表自動(dòng)備份在頭和尾兩份,并有CRC檸驗(yàn)位
8、總結(jié)學(xué)過(guò)的分區(qū),文件系統(tǒng)管理,SWAP管理相關(guān)的命令及選項(xiàng),示例fdisk,parted,mkfs,tune2fs,xfs_info,fsck,mount,umount,swapon,swapoff
- fidk
fdisk -l [-u] [device ... ] 查看分區(qū)
fdisk [device ... ] 管理MBR分區(qū)
gdisk [device ... ] 類(lèi)fdisk 的GPT分區(qū)工具
子命令:
p 分區(qū)列表
t 更改分區(qū)類(lèi)型
n 創(chuàng)建新分區(qū)
d 刪除分區(qū)
V 校驗(yàn)分區(qū)
u 轉(zhuǎn)換單位
w 保存并退出
q 不保存并退出
查看內(nèi)核是否已經(jīng)識(shí)別新的分區(qū)
cat /proc/partitions
CentOS 7,8同步分區(qū)表:
partprobe - parted
格式:
parted [選項(xiàng)] ... [設(shè)備 [命令 [參數(shù)] ... ] ... ]
范例:
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200(默認(rèn)M)
parted /dev/sdb rm 1
parted -1 列出所有硬盤(pán)分區(qū)信息 - mkfs
是分區(qū)創(chuàng)建文件格式 mkfs .ext4 /dev/sda mkfs .xfs /dev/sda - xfs_info 查看xfs文件信息
mount -a 自動(dòng)掛載文件系統(tǒng) mount -r 只讀掛載 - umount 卸載掛載點(diǎn)
- swapon 啟用swap分區(qū)
- swapoff 禁用swap分區(qū)
浙公網(wǎng)安備 33010602011771號(hào)