Linux入門 文字處理和正規表示式

2021-10-25 08:26:54 字數 4496 閱讀 2393

1 文字處理基本操作

more/less:逐屏顯示文字,一般用在很長的檔案檢視

head/tail:檢視檔案頭幾行或者末尾幾行

head -ntail -n
wc:word count,對於文字進行計數

wc -l 按照回車符計算有多少行wc -c 計算有多少單詞
tr: translate 翻譯字元,可以將乙個字串替換為另外乙個字串

tr string1 string2
sort:對文字進行排序

sort -n 表示倒序
uniq:取除重複字串

這個重複的行表示連續的行重複。

uniq 返回去除連續重複字串的結果uniq -u (unique) 只保留沒有重複的行uniq -d (duplicated) 只保留重複的行uniq -c (count) 計數同樣的行出現了幾次
tee:三通 將輸出內容同時輸出到螢幕和儲存到檔案。相比於重定向(>),重定向只能儲存到檔案。

2 正規表示式

正規表示式用來表示乙個字串的模式,其中基本正規表示式包括特殊字元六個:圓點(.),^,[,$,*,\。如果將要將這些特殊字元轉換為普通字元,需要使用轉義符\。圓點表示任意字元,^表示開頭,$表示結尾。使用連線符[-]可以表示乙個區間,不使用連線符[-]可以表示乙個集合。*表示前0個字元重複1次或者多次。特殊需要指出的是,^只有在正規表示式首位以及$在正規表示式尾部才能作為開始和結束的標記,在其他位置都是普通字元。在表示集合或區間的時候,^用在開頭可以表示補集,比如[^a-z],表示非小寫字母。

除此之外,還有擴充套件的正規表示式,可以用圓括號()和表示「或」的符號|,其次,還定義了和正規表示式中的星號地位類似的+和?。*號表示它左邊的單字元正規表示式的0次或多次重複,對應的,+號 表示1次或多次,?表示0次或一次。

目前主要有三種命名進行文字處理:grep,sed,awk。

grep(global regular expression print)命令是一種文字過濾程式,按照正規表示式的規則,僅篩選出含有指定模式字串的文字行。

grep pattern filename 在特定檔案查詢grep -r pattern docment 掃瞄資料夾中所有
awk:文字處理語言

awk 是一種處理文字檔案的語言,是乙個強大的文字分析工具。awk程式逐行掃瞄文字檔案,並進行處理。和其它的文字處理程式一樣,awk可以指定0到多個檔案作為處理物件。awk有很強的功能,它是一種模式掃瞄和處理語言,支援條件控制,迴圈控制,變數定義,函式等功能。

用法1: 

awk 'program' file-list
awk程式的寫法是:

condition {action}
awk把輸入檔案的每一行作為乙個「記錄」,變數nr就是行號。每行中,用空格或者

製表符分隔開的部分,叫做每個記錄中的「域」。變數$1指的是第1個域內容,依次,變數$2指的是第2個域內容,……。換句話說,就是列的資訊。特別的,$0指的是整個這一行的內容。begin和end。begin之後的動作,在awk開始處理所有文字行之前執行。同樣,end之後的動作,在awk處理完所有文字行之後執行。nf是當前行的總段數,fs是當前的分隔符,預設是空格鍵。

program裡面的內容,除了**,其他的格式用字串表示用空格隔開。

root@my:~# lastroot     pts/4        125.33.162.88    wed oct 28 12:54   still logged inroot     pts/4        125.33.162.88    wed oct 28 12:51 - 12:54  (00:03)
root@my:~# last | awk ''root    125.33.162.88
用法2: 

awk -f programfile file-list
programfile按照begin,end等格式編寫,字尾儲存為.awk.

beginend
last | awk -f cal.awk
sed(stream editor)是乙個流編輯程式,當指定的處理物件為0個檔案時,它從標準輸

入獲取輸入字元流,否則,將檔案中的資料作為作為輸入字元流。對輸入字元流進行編

輯處理,加工處理後再輸送到標準輸出。這兩種用法的區別和awk命令類似。

用法1: sed '命令' 檔名列表

root@my:~# last |sed 's/root/fff/g'fff     pts/0        125.33.162.88    wed oct 28 13:04   still logged infff     pts/4        125.33.162.88    wed oct 28 12:54   still logged in
sed的編輯命令有很多,這裡的s命令是「替換(substitute)」第一部分是正規表示式,第二部分是替換字串,最後的g是global flag,這一特徵字元,使得s命令在一行中遇到多個模式描述的字串時,都替換,否則,僅替換一次。

用法2: sed -f 檔名 檔名列表

sed指令碼是乙個sed的命令清單,啟動sed時以-f選項引導指令碼檔名。sed對於指令碼中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文字,如果在一行中有多個命令,要用分號分隔。以#開頭的行為注釋行,且不能跨行。這個目前我理解,sed指令碼就是乙個bash指令碼。

比較兩個檔案是否相同:

用法:cmp file1 file2用法:diff file1 file2
這兩個命令用於比較兩個檔案是否相同。

cmp命令逐個位元組比較兩個檔案是否完全相同,兩個檔案完全相同時,不給出任何提

示。當兩個檔案不同時,列印出第乙個不同之處。這個命令常用來判斷兩個檔案的內容

是否完全一致,無論是ascii碼檔案還是二進位制格式的程式或資料檔案。

root@my:~# cmp list.awk cal.awklist.awk cal.awk differ: byte 7, line 1
diff用來比較文字檔案

命令diff file1 file2每發現兩個檔案中的一處不同,就列出乙個如何將f1.c轉化為f2.c的指令,這些指令有a(add),c(change)和d(delete)。指令用乙個字母a,c或d表示,指令字母左邊的行號是file1的行號,指令右面的行號是file2的行號。列出內容時,大於號後邊的內容是需要在file1檔案中增加的內容,小於號後邊的內容是需要從file1中刪除的內容。

root@my:~# diff list.awk cal.awk1,9c1,3< begin< end<---> begin>> end
diff命令常用的選項有:

-b 逐行比較兩個檔案時忽略每行結尾處的多餘空格。

就可以變成檔案file2。ed也是乙個文字編輯命令。

diff -u 類似於git,版本管理系統,--表示移除,++表示新增。

說明:grep,awk,sed之間的區別是什麼?

grep用來搜尋字串,awk和sed用來文字處理。awk更加靈活一些,不僅可以按照行進行梳理,也可以對一些字段進行處理,可以使用c語言。sed可以在vi中使用,可以進行編輯,也可以不儲存這個編輯的結果(快取空間),保留原始檔案。

檔名萬用字元

檔名萬用字元是由shell解釋,也就是shell會幫我們把我的萬用字元對映成所有的目標結果。

linux 文字處理

1.文字處理 echo echo e 033 40 35m.背景顏色範圍 40 49 40 黑 41 深紅 42 綠 43 黃色 44 藍色 45 紫色 46 深綠 47 百色 字型顏色範圍 30 39 30 黑 31 紅 32 綠 33 黃 34 藍色 35 紫色 36 深綠 37 百色 eg e...

Linux 文字處理

author janloong do o cat 連線檔案並且列印到標準輸出 sort 給文字行排序 uniq 報告或者省略重複行 cut 從每行中刪除文字區域 paste 合併檔案文字行 join 基於某個共享欄位來聯合兩個檔案的文字行 comm 逐行比較兩個有序的檔案 diff 逐行比較檔案 p...

Linux文字處理命令

4 linux文字處理命令sort命令 sort命令的功能是對檔案中的各行進行排序。sort命令有許多非常實用的選項,這些選項最初是用來對資料庫格式的檔案內容進行各種排序操作的。實際上,sort命令可以被認為是乙個非常強大的資料管理工具,用來管理內容類似資料庫記錄的檔案。sort命令將逐行對檔案中的...