⑴ linux基本操作10-----正則表達式與文件格式化處理
一
正則表達式
1
簡單的說正則表達式就是處理字元串的方法,它是以行為單位來進行字元串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易的達到查找,刪除,替換某特定字元串的處理程序
2
grep在數據中查找一個字元串時,是以整行為單位來進行數據的選取的,也就是說假如一個文件內有10行,那麼其中兩行是有用的,那麼就將這兩行顯示出來,其它的丟棄
3
在bash當中,我們知道通配符*可以用來表示任意個字元,但是正則表達式中的*表示不同的含義
在正則表達式中,'.'表示的是一定有一個任意字元的意思
在正則表達式中,'*'表示的是重復前一個字元0到無窮多次的意思
4
基礎的正則表達式
RE字元
意義
^word
查找行首為word的行
word$
查找結尾為word的行
.
代表一定有一個任意的字元
*
重復前一個字元0個到無窮多個
[list]
從字元集合裡面選擇一個字元
[n1-n2]
從要選擇的范圍裡面選擇一個字元
[^list]
從不是這個字元集合裡面找出一個字元
/{n,m/}
連續n到m個的前一個字元,/{n/}則是連續n個前一個字元,/{n,/}則是聯系n到無窮多個前一個字元
二
sed
工具
1
sed本省是一個管道命令,可以分析標轉輸入,而且sed還可以將數據進行替換,刪除,新增,選取特定行等功能
2
sed的用法
sed
[-nefr]
[動作]
-n
使用安靜模式,在一般模式中,所有來自stdin的數據一般都會被列出到屏幕上,但是如果加上-n這個參數的話,則只有經過sed特殊處理的那一行才會被列出
-e
直接在命令模式上進行sed的動作編輯
-f
直接將sed的動作寫在一個文件內,-f
filename則可以執行filename內的sed動作
-r
sed的動作支持的是擴展正則表達式的語法
-i
直接修改文件的內容,而不是由屏幕輸出
3
動作說明
n1,n2
function
n1,n2不見得會存在,一般代表的是進行的動作的行數
function有下面這些參數
a:
新增,a的後面可以接字元串,而這些字元串會在新的一行出現,目前的下一行
c:
替換,c的後面可以接字元串,這些字元串可以替換n1,n2之間的行
d:
刪除,因為是刪除,所以d後面通常不接任何參數
i:
插入,i的後面可以接字元串,而這些字元串會在新的一行,目前的上一行
p:
列印,也就是將某個選擇的數據列印出來
s:
替換,可以直接進行替換的工作
三
文件的格式化以及相關處理
1
格式化列印
printf
'列印內容『
實際內容
關於C程序語言內,常見的變數格式
%ns
那個n是數字,s代表的是string
%nd
那個n是數字,d代表的是整數
%N.nf
那個n與N都是數字,f代表浮點數
2
文件比較工具diff
diff就是用在比較兩個文件之間的區別,並且是行為單位來比較的,一般是用在ASCLL純文本文件的比較上
diff的用法
diff
[-bBi]
from_file
to_file
-b
忽略一行當中僅有多個空白的區別
-B
忽略空白行的區別
-i
忽略大小寫的不同
3
如果我們要將舊的文件升級成為新的文件時,我們可以先利用diff比較出文件的區別,並將區別文件製作成為補丁文件,再由補丁文件更新舊文件即可。
一般來說我們使用diff製作出來的比較文件通常擴展名為.patch
更新:patch
-pN
<
patch_file
還原:patch
-R
-pN
<
patch_file
⑵ 請問下面這個linux正則表達式是什麼意思 NAME_REGEX="^[a-z][-a-z0-9_]*\$"
^[a-z]是指行首第一個字元是小寫字母
[-a-z0-9_]第一個"-"是連接符,意思後面的字元跟前面的字元是緊挨著的;a-z0-9就好理解了,是任意小寫字元或數字中的一個;_是指0個或1個前面的字元
*號代表重得多個前面的字元串,即多個[a-z0-9]
\轉義符號
$行尾,代表結束
⑶ Linux如何使用正則表達式命令文本文件操作命令
Linux對文本操作命令及正則表達式:
cat
cat 是 concatenate 的縮寫,所以它的作用其實是連接文件。但默認情況下它會將連接文件的結果送到標准輸出。所以我們常用來顯示文件內容。類似於 dos 中的 type。
more
當一個文件的內容超過一屏後,我們可以用 more 這個指令來逐屏 察看 文件內容。
less
less 在 more 的基礎上,更可以逐行 察看 ,前後翻頁。
head
head 顯示文件開頭部分內容,默認顯示前十行參數 --lines 或者 –n 指明顯示行數基本格式:
tail
tail 顯示文件結尾部分內容,命令用法同 head,參數 -f 顯示文件的紀實更新,用於監視日誌文件
tail 默認顯示文件列表中每個文件的後 10 行,如果沒有文件名或文件名為「-」則其從標准輸入中讀取文件,如果有多個文件則其會在文件前面加上「==>文件名<==」以便區別。
# tail /etc/mail/sendmail.mc 默認查看文件的後 10 行內容
# tail –n 20 /etc/passwd 查看文件後 20 行內容
注意: # tail –f /var/log/message 實時監控日誌文件更新信息,非常重要
diff
diff 用於比較兩個文件之間的區別,並送到標准輸出。輸出時先報告兩個文件的哪一行不同。基本格式:
參數:
uniq 用於去除文本中相鄰的重復行。
-u 參數可以只顯示那些沒有被重復過的行。 -d 顯示有被重復過的行。
cut
cut 可以根據一個指定的標記(默認是 tab)來為文本劃分列,然後將此列顯示。使用許可權:所有使用者
基本格式: cut -cnum1 -num2 filename
說明:顯示每行從開頭算起 num1 到 num2 的文字。
[root@uplooking root] $ cut –f1 –d: /etc/shadow 表示以 : 為分隔符,顯示 /etc/shadow 的第一列 sort
sort 用來按各種需要重新排列文本,一般運用在一個管道之後。例如:
默認情況下 sort 按照字母順序排列文本。
wc
wc 用來統計一個文件的行數、詞數、字數並送到標准輸出。也可以用-l(行數)、-w(詞數)、-c(字數)來指定輸出內容。