Linux 常用命令sed/awk/grep及正則表示式
sed
主要功能
sed,stream editor。是一個”非互動式“字元流編輯器。輸入流通過程式並輸出到標準輸出端。
sed主要用來自動編輯一個或者多個檔案(替換,插入,刪除,追加,更改)
常見應用
- 抽區域
- 匹配正則表示式
- 比較域
- 增加,附加,替換
執行過程
sed一次處理一行或多行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行或多行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向或寫入命令儲存輸出。
呼叫方式
- 命令列輸入
sed [選項] ‘sed命令’ 輸入檔案
- 使用sed指令碼
sed [選項] –f sed指令碼檔案 輸入檔案
常用選項
-n:不列印,不寫編輯行到標準輸出,預設情況下列印所有行[編輯/未編輯]p命令可以列印編輯行
-c:下一命令是編輯命令,使用多項編輯時加入此選項
-f: 呼叫sed指令碼 sed –f sedScriptFile targetFile
-i:將修改附加到原始檔上
使用技巧
重定向sed結果輸出
$sed ‘sed-command’ inputfile > outputfile
定位內容的方式
x
行x
x,y
行x到行y
/pattern/
模式
/pattern/pattern/
兩個模式
/pattern/,x
X,y
/pattern/ 通過行號和模式查詢匹配行
X,y!
不包含指定行號
基本的sed命令
P 列印匹配行 print
= 列印匹配行行號
a\ 定位行號後附加新文字資訊 append
i\ 定位行號後插入 insert
d 刪除定位行 delete
c\ 用新文字替換定位文字 change
s 使用替換模式替換相應模式
r 從另一個檔案中讀文字 read
w 寫文字到一個檔案 write
q 第一個模式匹配完成後退出或立即退出
{} 定位執行命令組
n 從另一個檔案中讀文字下一行,並附加在下一行
g 將模式2黏貼到/pattern n/
y 傳送字元
例項:
- 顯示文字
$sed -n '1,4p' file
顯示1-4行
$sed -n '4,/Str/p'
顯示第4行到匹配到Str的一行,/str/代表匹配到的一行
- 插入修改文字
$sed '/str/a\ "inserted line"' file
在滿足條件的行後,插入內容
sed '/str/i\ "appended line"' file
在滿足條件的行前插入內容
$sed '3 c\ "changed line"' file
滿足條件的行,整行替換掉
- 刪除文字
$sed '1,3d' file
刪除1-3行
$sed '/str/d' file
刪除匹配行
$sed -n '/Begin/,/End/p' file | more
刪除兩個匹配行之間的資料
- 替換文字
格式:[address[,address]] s/pattern-find/replacement-pattern/[g,p,w,n]
n 1到512之間的一個數字,表示對本模式中指定模式第n次出現的情況進行替換。
g 對模式空間所有出現的情況進行全域性更改【預設只替換首次出現的模式 】
p 列印模式空間的內容
w file
$sed 's/str/tostr/' file
替換每一行首次出現的str為tostr
$sed 's/str/tostr/g' file
替換所有的行內,出現的所有str為tostr
$sed 's/str/tostr/w output' file
替換後重定向到output
轉換字元
sed 'y/cp/wd/' test.txt
c轉換成w,p轉換成d
- Shell向sed傳值
echo $input | sed 's/bb/'$str'/'
echo $input | sed "s/bb/$str/"
awk
主要功能
awk是一種用於處理文字的工具,主要用於格式化報文,或從一個大文字中抽取資料。
執行過程
awk每次讀入一行,執行’ ‘中的內容,按模式匹配來採取動作
格式
awk 'pattern+{action}' file
pattern用於篩選查詢匹配行,決定了動作何時觸發,可以使用條件語句,正則表示式
action用於對篩選後的內容進行處理
BEGIN可以設定計數和列印頭(可選)
END列印輸出文字總數和結尾狀態標識(可選)
常用引數
-F 指定讀取一行資料的分隔符,預設為空格
-f 指定處理程式的指令碼檔案,這個檔案必須符合awk語法
呼叫方式:
awk –f awk-script-file input-files
常用內建引數
$0,$1,....$n
$0
代表當前行的內容,$i
代表當前行被分割後的第i個欄位的內容
ARGC 命令列引數個數
ARGV 命令列引數排列
ENVIRON 支援佇列中系統環境變數的使用
FILENAME 實際操作的檔名
FNR 瀏覽檔案記錄數,<=NR
FS 設定輸入域分隔符,等價於命令列-F選項 ,可在BEGIN中進行設定,然後執行的時候均以設定的符號為分隔符
NF 瀏覽記錄 域的個數,在記錄被讀取時設定【number of fields】一共有多少個域
NR 已讀取記錄數【number of rows】
RS 控制記錄分隔符,預設:新行\n,Row Separator記錄分隔符,可以根據具體資料需求,設定讀取一條記錄的區間
OFS 輸出域的分隔符,預設空格,輸出結果 print $1,$2預設加的是空格,可以在BEGIN中設定,改為其他分隔符
ORS 輸出記錄的分隔符,預設:新行\n,整體記錄的
例項
- 列印
列印所有行
awk '{print $0}' file
列印包含頭尾
awk 'BEGIN{print "Name Age"}{print $1,$2}END{print "END_OF_REPORT"}'
- 使用判斷語句
< <= > >= == !=
~匹配正則 !~不匹配正則
|| && !
或且非
awk '{if($2!~/Rudy/) print $0}' content
awk '{if($1=="001" && $2~/^Ru/) print $0}' content
- 使用內建的變數
awk 'BEGIN{OFS='\t'}{print NF,NR,$0}END{print FILENAME}' content > output
設定輸出的分隔符為’\t’,輸出一些內建變數的資訊
- AWK變數中的字串和數字的轉換
字串->整數
$ awk 'BEGIN{a="100";b="10test10";print (a+b+0);}'
110
只需要將變數通過”+”連線運算。自動強制將字串轉為整型。非數字變成0,發現第一個非數字字元,後面自動忽略。
整數->字串
awk 'BEGIN{a=100;b=100;c=(a""b);print c}'
100100
只需要將變數與””符號連線起來運算即可。
- 使用內建的字串函式
gsub(r,s)
在整個$0中用s代替r
gsub(r,s,t)
在整個t中用s替代r
index(s,t)
返回s中字串t的第一位置
length(s)
返回s長度
match(s,r)
測試s是否包含匹配r的字串
split(s,a,fs)
在fs上將s分成序列a.fs為分隔符
sprint(fmt,exp)
返回經fmt格式化後的exp
sub(r,s)
用$0中最左邊最長的子串代替s
substr(s,p)
返回字串s中從p開始的字尾部分
substr(s,p,n)
返回字串s中從p開始長度為n的字尾部分
替換字串
awk 'BEGIN{FS='\t'}{gsub(/Rudy/,"RUDY");{print $0}}' content
- 使用printf進行格式化輸出
%c
ASCII字元
%d
整數
%e
浮點數,可科學計數法
%f
浮點數,小數形式
%g
由awk決定使用哪種浮點數轉換e或f
%o
八進位制
%s
字串
%x
十六進位制
格式化輸出一個字串
awk -F'\t' '{printf("%s\t%s\n",$2,$1)}' content
- 向awk中傳遞引數
awk '{if($3<=AGE){print $0}}' AGE=20 content
-
寫一個awk指令碼
#!bin/awk -f BEGIN{ FS="['\t']" printf("%s\t%s\t%s\n","NUMBER","NAME","AGE") } { printf("%s\t%s\t%s\n",$1,$2,$3) } END{ print "END OF FILE" }
linux正則表示式和grep
正則表示式
正則表示式描述了一種字串匹配的模式,常用於:
- grep:從特定的檔案中或從標準輸入中查詢含有某個字串的行
- sed :從輸入中讀取資訊,經過編輯後輸出
- awk: 偽裝成實用程式的強大程式語言,主要用於文字處理
常用符號
基本元字元
^
行首定位符,表示以..開始
$
行尾定位符,表示以..結束
.
匹配單個字元
*
匹配0個或任意多個字元
[]
匹配[]中出現字元範圍內的一個字元
\
用來轉義元字元,如{m,n},啟用擴充套件元字元\? +
擴充套件元字元
?
匹配0個或者1個
+
匹配1個或者多個
|
或者
()
分組符號
特殊匹配字元
[:alnum:]
字母與數字字元
[:alpha:]
字母
[:ascii:]
ASCII字元
[:blank:]
空格或製表符
[:cntrl:]
ASCII控制字元
[:digit:]
數字
[:graph:]
非控制、空格字元
[:lower:]
小寫字母
[:print:]
可列印字元
[:punct:]
標點符號字元
[:space:]
空白字元,包括垂直製表符
[:upper:]
大寫字母
[:xdigit:]
十六進位制數字
例項
- ^ $
ls -l | grep ^d
匹配以d開頭的所有內容
ls -l | grep d$
匹配以d結束的所有內容
^$
匹配空行
^.$
只包含一個字元的
* ? +
compu*ter
匹配u,重複0次或多次
compu?ter
匹配0個或者1個u
compu+ter
匹配1個或多個u
需要注意的是+和?是擴充套件字元,需要看具體使用正則表示式的環境
如果使用grep需要使用-E指定為擴充套件模式才能正常使用+和?
\
可以遮蔽一些特殊字元,如$ . ‘ “ * [ ] ^ | ( ) \ + ?
\.pass
匹配*.pass
[]
[1234]
匹配1,2,3,4中的一個
[1-9]
數字1-9中的一個
[A-Za-z]
所有字母
[^0-9]
一個非數字的字元
\{\}
A\{2\}B
匹配AAB
A\{4,\}B
匹配A出現至少4次B
A\{2,4\}B
匹配A出現在2至4次之間
grep
功能:grep是文字搜尋工具,使用正則表示式搜尋文字並列印匹配行
格式:grep [options] PATTERN [Files]
注:
輸入字串作為引數,最好雙引號括起 “mystr”
在呼叫變數時,也使用雙引號括起 “$MYSTR”
使用正則[匹配模式]是,應使用單引號括起 ‘49[32]’
常用選項:
-c
只輸出匹配的行數,而不輸出匹配的行
-i
不區分大小寫
-n
顯示匹配行及行號
-q
安靜模式,不輸出任何東西,如果找到了返回0
-E
啟用擴充套件表示式,可使用擴充套件字元,如:+ ? | () {} , 或者直接使用egrep
-v
顯示不包含匹配文字的所有行
例項:
-
在多個檔案中查詢
grep “sort” filea fileb
在filea,fileb中查詢 -
計算匹配行數
grep -c "sort" file
-
使用正則表示式查詢
grep '48[34]' file
-
使用擴充套件元字元
grep -E 'aaa|bbb' file
-
匹配空行
grep '^$' file
-
特殊匹配字元,grep 允許使用國際字串模式匹配或匹配模式的類名
grep ‘5[[:upper:]] [[:upper:]]’
data 5開頭,兩個大寫
正則表示式
簡介
描述了一種字串匹配的模式,常用於:
grep:從特定的檔案中或從標準輸入中查詢含有某個字串的行
sed :從輸入中讀取資訊,經過編輯後輸出
awk: 偽裝成實用程式的強大程式語言,主要用於文字處理
程式語言:如python
符號
基本符號
^
行首定位符,表示以..開始$
行尾定位符,表示以..結束.
匹配單個字元*
匹配0個或任意多個字元[]
匹配[]中出現字元範圍內的一個字元\
用來轉義元字元,如{m,n},啟用擴充套件元字元\? +
擴充套件元字元
grep支援基本元字元,通過egrep
或者grep
-e
可以啟用擴充套件元字元。
?
匹配0個或者1個+
匹配1個或者多個|
或者()
分組符號{i}
表示出現了i次,{i,j}表示出現了i到j次
\n
匹配一個換行符。\t
匹配一個製表符。\d
匹配一個數字,等價於[0-9]\D
匹配一個非數字,等價於[^0-9]\s
匹配任何空白字元,包括空格、製表符、換頁符等等。等價於[
\f\n\r\t\v]
。[^\s]
表示任何非空白字元\S
匹配任何非空白字元。等價於[^ \f\n\r\t\v]。
\w
匹配包括下劃線的任何單詞字元。等價於“[A-Za-z0-9_]”
。\W
匹配任何非單詞字元。等價於“[^A-Za-z0-9_]”。[^\w]
注意\S
比\w
包括@#¥
等更多特殊字元
簡單例項
^ $
ls -l | grep ^d 匹配以d開頭的所有內容 ls -l | grep d$ 匹配以d結束的所有內容 ^$ 匹配空行 ^.$只包含一個字元的
* ? +
compu*ter 匹配u,重複0次或多次 compu?ter 匹配0個或者1個u compu+ter 匹配1個或多個u
\
可以遮蔽一些特殊字元,如$ . ‘ “ * [ ] ^ | ( ) \ + ?
-
[]
[1234] 匹配1,2,3,4中的一個 [1-9] 數字1-9中的一個 [A-Za-z] 所有字母 [^0-9] 一個非數字的字元
-
{}
相關推薦
Linux 常用命令sed/awk/grep及正則表示式
sed 主要功能 sed,stream editor。是一個”非互動式“字元流編輯器。輸入流通過程式並輸出到標準輸出端。 sed主要用來自動編輯一個或者多個檔案(替換,插入,刪除,追加,更改) 常見應用 抽區域匹配正則表示式比較域增加,附加,替換 執行過程 sed一次處理一行或多行內容。處理時,把
inux基礎命令 sed awk grep 及部分快捷鍵
退出 查看命令 數列 sed -n inux clear -a 出錯 ctrl+ 基本命令 sed stream deitor(編輯器) 流編輯器,實現對文件的增加刪除及該替換查 1、使用sed命令 進行查看 [root@VM_86_3_centos 0
Linux日常——shell工具之grep(包含正則表示式)、sed
grep行過濾器 grep是⼀種查詢過濾⼯具 正則表示式在grep中⽤來查詢符合模式的字串。 egrep相當於grep -E,表⽰採⽤Extended正則表示式語法。 fgrep相當於grep - F,表⽰只搜尋固定字串⽽不搜尋正則表示式模式,不會按正則
Linux使用者組和許可權管理及正則表示式
1、複製/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部檔案的屬組和其他使用者沒有任何訪問許可權。 [[email protected] ~]# cp -a /etc/skel /home/tuser1 [[email protected] ~]#
grep,sed,awk與簡單正則表達式應用
Linux學習grep,sed,awk與簡單正則表達式應用 這裏使用的測試文件是linux /etc/passwd文件,最好是復制一份進行練習,方式對文件內容造成損壞。感覺還是要多練習才能很好的使用,習題這裏就不貼了,網上一找一大把。 grep: -o 用作計算出現多少次字段&e
Linux常用命令——sed
一次 9.png num edit sta bak RoCE 空白 開頭 sed 字符流編輯器 sed 是Stream Editor(字符流編輯器)的縮寫,簡稱劉編輯器。sed 是操作、過濾和轉換文本內容的強大的工具。常用功能包括對文件實現快速增刪改查,其中查詢的功能中最常
Linux常用命令(二 ): grep命令
Linux grep命令用於查詢檔案裡符合條件的字串。 grep指令用於查詢內容包含指定的範本樣式的檔案,如果發現某檔案的內容符合所指定的範本樣式,預設grep指令會把含有範本樣式的那一列顯示出來。若不指定任何檔名稱,或是所給予的檔名為"-",則grep指令會從標準輸入裝置讀取資料。 語法
快速掌握grep命令及正則表示式
Linux系統自帶了支援拓展正則表示式的 GNU 版本 grep 工具,所有的Linux發行版中均預設安裝grep ,grep 命令被用來檢索一臺伺服器或工作站上任何位置的文字資訊,如何在 Linux 系統和類 Unix 的作業系統中使用帶正則表示式的 grep 命令呢?
2.6-grep及正則表達式
grep及正則表達式grep: Linux上文本處理三劍客 grep:文本過濾(模式:pattern)工具 grep,egrep,fgrep(fast grep) sed:stream editor,文本編輯工具 awk:Linux上的實現
shell編程初步、grep及正則表達式
Linux shell 正則表達式 bash的基礎特性(3)1、提供了編程環境 程序=指令+數據 程序編程風格過程式:以指令為中心,數據服務於指令對象式:以數據為中心,指令服務於數據 shell程序:提供了編程能力,解釋執行 程序的執行方式:計算機:運行二進制指令編程語言:低級:匯編高級:編譯:高
學習之路(三)淺談:輸出重定向,grep及正則表達式,egrep
grep 地址總線:內存尋址 數據總線:傳輸數據 控制總線:控制指令 > :輸出重定向(會覆蓋原有內容) >>: 追加重定向(不會覆蓋,追加輸出) 2>: 重定向錯誤輸出 2
Linux練習題-文本管理工具及正則表達式
目錄名 地址 ini 登錄 images netstat last 命令 tst 1、找出ifconfig “網卡名” 命令結果中本機的IPv4地址方法1:ifconfig ens33 | grep -w "inet" | tr -s '
LINUX學習—grep和正則表示式(LINUX三劍客)
grep, egrep, fgrep grep(GLOBAL RESEARCH) 是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。根據模式,搜尋文字,並將符合模式的文字行顯示出來。只能使用基本正則表示式 要使用擴充套件正則表示式需要-E pattern
第四周作業(alias、grep、正則表示式、find命令的基本用法)
1.命令別名 alias的用法 通過alias命令實現: (1)alias不帶任何選項將顯示當前shell下所有的可用的命令別名的資訊,其中,等號之前表示新的命令名稱,等號右邊表示的是要替代的命令及其引數。 (2)定義別名: alias new_name='old_name options' 注:通
sed及正則表示式
9.4/9.5 sed sed sed 是一種新型的,非互動式的編輯器。它能執行與編輯器 vi 和 ex 相同的編輯任務。sed 編輯器沒有提供互動式使用方式,使用者只能在命令列輸入編輯命令、指定檔名,然後在螢幕上檢視輸出。sed 編輯器沒有破壞性,它不會修改檔
linux(ubuntu)文字處理工具及正則表示式
grep egrep(文字過濾) fgrep(不支援正則) 格式 grep [選項] 模式 檔案 選項:--color 指定顏色 -v反向匹配,顯示不能被模式匹配到的行 &n
java學習--常用類及正則表示式
宣告:由於學習所用環境為JDK1.8,所有java程式碼均在JDK1.8環境中測試通過,如果環境發生變化,可能會發生錯誤! 一、常用類 1、Math類 (1)Math 類提供了一序列基本數學運算和幾何函式的方法。 Math類是final類,並且它的所有成員變數和成員
linux 下利用ls grep 和正則表示式實現目錄和檔案的分開顯示
要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解
文字處理及正則表示式
文字處理及正則表示式 檔案檢視 檔案檢視命令: cat,tac,rev cat [OPTION]… [FILE]… cat -E:顯示行結束符$ -n:對顯示出的每一行進行編號 -A:顯示所有控制符 -b:非空行編號 -s:壓縮連續的空行成一行 ta
Elasticsearch中的萬用字元及正則表示式查詢
想要在ES中使用*或者?作為萬用字元進行模糊匹配? 看這篇就對了~ 本文為轉發!!! 轉自:https://blog.csdn.net/dm_vincent/article/details/42024799 wildcard查詢和prefix查詢類似,也是一個基於詞