① 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 sed 命令詳解
一、基本正則列表與擴展正則
二、sed 文本處理工具的用法介紹
三、認識sed工具的 n、r、i 選項指令
四、認識sed工具的 p、d、s 條件指令
五、認識sed工具的 i、a、c 條件指令
六、認識sed高級應用 r、w 條件指令
七、綜合案例
Linux sed
Stream EDitor,流式編輯器
一、基本正則列表與擴展正則
根據推出時間的不同,分為基本正則和擴展正則,擴展正則在基本正則的基礎上做了一些優化和新增了一些正則表達符號,因為一些命令沒有及時更新,所以你可能會遇到有些命令只支持基本正則,不支持擴展正則,或者需要添加一些支持擴展正則的選項。
關於正則與擴展正則區別的詳細介紹可以看我另一篇shell 正則的介紹
基本正則列表
擴展正則列表
二、sed 文本處理工具的用法介紹:
相關說明如下:
sed命令的常用選項如下:
sed命令常用條件指令如下
三、認識sed工具的 n、r、i 選項指令
# sed [選項] '條件指令' 文件.. ..
上面的條件指令 我們可以拆分為 # sed [選項] '范圍界定+操作指令' 文件.. .. 的格式這樣更容易理解
sed命令可以使用行號或正則做為條件匹配:
1)sed命令的 -n 選項
執行p列印等過濾操作時,希望看到的是符合條件的文本。但不使用任何選項時,默認會將原始文本一並輸出,從而干擾過濾效果。比如,嘗試用sed輸出/etc/hosts的第1行:
可以發現所有的行都被顯示出來了(第1行重復2次)。—— 正確的用法應該添加 -n 選項,這樣就可以只顯示第1行了:
行號可以是連續的行號,如列印passwd第3到第6行賬戶的信息:
2)sed命令的 -r 選項
需要用到擴展正則時,需要加 -r選項
3)sed命令的 -i 選項
正常情況下,sed命令所做的處理只是把操作結果(包括列印、刪除等)輸出到當前終端屏幕,而並不會對原始文件做任何更改:
若希望直接修改文件內容,應添加選項 -i 。
需要特別注意的是,和一些指令組合和使用的先後順序都會對最終輸出結果產生影響
例如: 指令 -n、和操作操作p
比如,直接刪除test.txt(自行創建一個任意內容的文件)的第1~4行:
下文中關於使用sed修改文件的示例中,為了避免大家在練習過程中因誤操作導致系統故障,命令省略 –i 選項,不再逐一說明。需要時,大家可自行加上此選項。
4)多個指令可以使用分號隔離
用分號來隔離多個操作,比如:
1)行號案例
2)正則案例
3)沒有條件,則表示匹配所有行
四、認識sed工具的 p、d、s 條件指令
1)下面看看sed工具的p指令案例集錦(自己提前生成一個a.txt文件)
2)下面看看sed工具的d指令案例集錦(自己提前生成一個a.txt文件)
3)sed命令的s替換基本功能(s/舊內容/新內容/選項):
4)下面看看sed工具的s指令案例集錦(自己提前生成一個a.txt文件)
注意:替換操作的分隔「/」可改用其他字元,如#、&等,便於修改文件路徑
以下操作使用nssw.txt作為測試文件。
參考數據文件內容如下:
5)刪除文件中每行的第二個、最後一個字元
分兩次替換操作,第一次替換掉第2個字元,第二次替換掉最後一個字元:
6)將文件中每行的第一個、倒數第1個字元互換
每行文本拆分為「第1個字元」、「中間的所有字元」、「倒數第1個字元」三個部分,然後通過替換操作重排順序為「3-2-1」:
7)刪除文件中所有的數字
因原文件內沒有數字,行首也沒有空格,這里在內容中新增一些數字另外新幾行內容 首行添加幾行空格,生成一個新測試文件以 nssw2.txt
以nssw2.txt文件為例,刪除所有數字、行首空格的操作如下:
8)為文件中每個大寫字母添加括弧[]
使用「()」可實現保留功能,所以可參考下列操作解決:
五、認識sed工具的 i、a、c 條件指令
# sed [選項] '條件指令' 文件..
sed工具的多行文本處理操作:
基本語法格式案例:
1)sed命令的 i 指定行之前插入基本功能
2)sed命令的a追加基本功能
3)sed命令的c替換基本功能
六、認識sed高級應用 r、w 條件指令
1)sed命令的 r 讀取文件
2)sed命令的 w 保存到文件
七、綜合案例
1) 綜合案例1
2)綜合案例2 腳本應用
③ linux下刪除某一目錄下所有非文件夾的文件命令
刪除文件命令
rm
NO1. 刪除當前目錄的文件
[root@rehat root]# rm test.txt
NO2. 強制刪除當前目錄的文件,不彈出提示版
[root@rehat root]# rm -f test.txt
NO3. 強制刪除整個權目錄,包括目錄與文件全部刪除,需要管理員許可權
[root@rehat root]# rm -r -f test
刪除文件夾命令
rmdir
NO1. 刪除一個空目錄
[root@rehat root]# rmdir emptydir
NO2. 刪除多級空目錄
[root@rehat root]# rmdir -p emptydir/d1/d11
④ linux 正則匹配 刪除文件中不包含某字元串的行
sed - '/bbb/!d' filename
這樣就可以了吧.
⑤ linux 刪除0位元組和替換0位元組文件的腳本怎麼寫
刪除,比如在當前目錄下面可以用find . -name "*.sh" -size 0 -exec rm {} \;
⑥ Linux下查找替換的正則怎麼寫求教
root@qfgz:~/xly# cat 1
1
2
<SCRIPT adlfbhalsdf
ads
asd
fas
dflajsdhfgblahsdfb
asd-- a-sd-asd-- SCRITP>
3
4
root@qfgz:~/xly# sed "/<SCRIPT/,/SCRITP>/d" 1
1
2
3
4