linux 從頭開始 七 正則

2021-09-27 15:51:20 字數 3215 閱讀 2592

寫在前面, 語系對正則匹配會有影響。

特殊符號

代表意義

[:alnum:]

0-9, a-z, a-z

[:alpha:]

a-z, a-z

[:blank:]

空格和tab

[:cntrl]

鍵盤的控制按鍵

[:digit:]

0-9[:graph:]

除了空格和tab以外所有的按鍵

[:lower:]

a-z[:print:]

代表任何可以被列印的出來的字元

[:punct:]

代表標點符號

[:upper:]

a-z[:space:]

任何產生空白的字串

[:xdigit:]

代表十六進製制的數字型別

幾個例子:

grep -in 'the' ***.txt           忽略大小寫, 列出行號, 行中有沒有出現過 the

grep -n 't[ae]st' xx.txt

grep -n '[^g]oo' xx.txt 非, 不已g開頭

grep -n '[^[:lower:]]oo' oo前不已小寫字母開頭

grep -n '[^[:lower:]]oo'

grep -n '^[^a-za-z]' 不以字母開頭

grep -v '^$' xx.txt 匹配空白行 v 反向選擇

grep -n 'go\ a.txt 注意{} 要轉義

-n       使用安靜模式,在一般的sed用法中, 所有來自stdin的資料會被列出到螢幕上。但如果加上了-n引數後,則只有經過sed處理的那一行才會被顯示出來

-e    直接再命令列模式進行seb編輯操作

-f     直接將sed的操作寫在乙個檔案內, 

-r    sed的操作使用的是擴充套件的正規表示式, 預設的是基礎的正則

-i    直接修讀取的檔案內容, 而不是螢幕輸出

n1,n2   function    n1, n2指定操作的行, 

a    新增, a後面可以接字串, 加再當前行的下一行

c     替換, c後面字串, 將替換n1, n2的行

d     刪除

i      插入, 後面加字元, 插入當前行的上一行

p    列印

s    替換, 可以搭配正則, s/ / /g

nl /etc/passwd | sed '2,5d'         nl 代代行號列出檔案的內容,刪除2到5行

nl /etc/passwd | sed '2d' 只刪除第二行

nl /etc/passwd | sed '2,&d' 刪除第三行和它後面所有的行

nl /etc/passwd | sed '2a ******'  在第二行後面, 就是第三行,加入***, 

原本的第三行變成第四行, 但是nl顯示新加的沒行號。 p374

nl /etc/passwd | sed '2a ******x \[enter]

sasdsd' 插入多行

nl /etc/passwd | sed '2,5c ***x'    正行替換, 被替換的行變成乙個***x

nl /etc/passwd | sed -n '2,5p' 列印2到5行, 注意要加-n

sed 's/要替換的字串/新的字串/g'

/sbin/ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g'

不管它/sbin/ifconfig eth0是什麼意思, 就是找到有inet所有的行,^.*inet 替換成空

直接修改內容

sed -i 's/\.$/\!/g' xx.txt 注意有轉義, 就是 \.$ 以.結尾的, 都換成!

加了 -i 可以直接修改檔案內容。 而不是輸出在螢幕上

egrep  <==> gerp - e

egrep -v '^$|^#'  ***.txt     v 反選
last -n 5 | awk ''       注意單引號和雙引號的使用, 

以tab 分割每行, 取出第一欄和第三欄

$0 代表一整行資料, $1第一欄

awk 還有如下的變數nf

每一行擁有的總段數,幾欄

nr處理的是第幾行資料

fs目前的分隔符, 預設時空格

[root@ ~]# last -n 5 | awk ''

root lines: 1 columns: 10

root lines: 2 columns: 10

root lines: 3 columns: 10

root lines: 4 columns: 10

root lines: 5 columns: 10

加上邏輯判斷

cat /etc/passwd | awk ' $3 < 10 '

如果第三欄小於10, 則按要求列印

但是第一行沒顯示出來, 因為fs=":" 從第二行才開始生效

所以可以這樣

cat /etc/passwd | awk 'begin $3 < 10 '

-b    忽略一行多個空白差異     do it   和  do                  it  的擦別

-b   忽略空白行差異

-i     忽略大小寫

diff passwd.old passwd.new  

< 4d3 左邊的檔案第四行被刪了, 基準是右邊的第三行

< 6c5 左邊檔案的第六行被替換成右邊的第五行

。。。。。。

-l   列出雖有不同地方, 預設不加, 只列出乙個不同

cmp passwd.ord passwd.new

linux 從頭開始 二

du h 檢視每個檔案和目錄的的磁碟使用空間 df h 檢視磁碟分割槽上可使用的的硬碟空間,相當於win的我的電腦,檢視每個分割槽使用情況 ln 原始檔 做成的硬鏈結 1 檔案有相同的 inode 及 data block 2 只能對已存在的檔案進行建立 3 不能交叉檔案系統進行硬鏈結的建立 就是只...

Deep Learning 從頭開始

deep learning已經火了好久,有些人已經在這裡面耕耘了好多年,而有些人才剛剛開始,比如本人。如何才能快速地進入這個領域在較短的時間內掌握deep learning最新的技術是值得思考的問題。就目前的情況看,通過網路上的課程及各種tutorials以及各種 來研究這個領域是最佳的途徑。經過一...

git從頭開始

當你本地修改了乙個檔案,而且該檔案被另乙個人修改,並push了,那麼 users terry workspace git練習 git practise git master git pull updating 67e4e18.cdbf666 error your local changes to t...