grep:文本過濾(模式:pattern)工具;
grep, egrep, fgrep(不支持正則表達式搜索
sed:stream editor,文本編輯工具;
awk:Linux上的實現gawk,文本報告生成器;a
grep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd
grep |
"$USER" |
/etc/passwd |
|
grep |
'$USER' |
/etc/passwd |
|
grep |
`whoami` |
/etc/passwd |
–color=auto: 對匹配到的文本著色顯示;
v -v: 顯示不能夠被pattern匹配到的行;
v -i: 忽略字符大小寫
v –n:顯示匹配的行號
v -c: 統計匹配的行數
v -o: 僅顯示匹配到的字符串;
v -q: 靜默模式,不輸出任何信息
v -A #:after, 后#行
v -B #: before, 前#行
v -C #:context, 前后各#行
v –e:實現多個選項間的邏輯or關系=grep “cat -o dog”
grep –e ‘cat ’ -e ‘dog’ |
file |
|
v |
–w:整行匹配整個單詞 |
|
v |
–E:使用ERE |
基本正則表達式:BRE 擴展正則表達式:ERE
grep -E, egrep
字符匹配:
. : 匹配任意單個字符;
[] : 匹配指定范圍內的任意單個字符
[^] :匹配指定范圍外的任意單個字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]
、[:punct:]、[:space:]
匹配次數:用在要指定次數的字符后面,用于指定前面的字
符要出現的次數
*:匹配前面的字符任意次,包括0次 貪婪模式:盡可能長的匹配
.*:任意長度的任意字符
\?:匹配其前面的字符0或1次 包含行內其他的
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次 貪婪模式
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
位置錨定:定位出現的位置
^:行首錨定,用于模式的最左側
$:行尾錨定,用于模式的最右側
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:詞首錨定,用于單詞模式的左側
\> 或 \b:詞尾錨定;用于單詞模式的右側
\<PATTERN\>:匹配整個單詞
分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進
行處理,如:\(root\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄 于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間
的模式所匹配到的字符;
sed是一種流編輯器,它一次處理一行內容。處理時,把 當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容
,處理完成后,把緩沖區的內容送往屏幕。接著處理下一
行,這樣不斷重復,直到文件末尾。文件內容并沒有改變
,除非你使用重定向存儲輸出。Sed主要用來自動編輯一 個或多個文件,簡化對文件的反復操作,編寫轉換程序等
用法:
sed [option]… 'script' inputfile…
v 常用選項:
–n:不運行模式空間內容進行自動打印一般跟-n使用
–e: 多點編輯
–f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
–r: 支持使用擴展正則表達式
-i: 原處編輯,直接更改原件
v script:
'地址命令'
v 地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/第一次出現pART1到第一次出現PART2
#,/pat1/
(4) ~:步進
1~2 奇數行
2~2 偶數行
v 編輯命令:
d: 刪除模式空間匹配的行
p: 顯示模式空間中的內容,自動打印
a \text:在行后面追加文本,單獨顯示行文本;支持使用\n實現多行追加
i \text:在行前面插入文本;支持使用\n實現多行插入
c \text:替換change行為單行或多行文本
w /path/to/somefile: 保存模式匹配的行至指定文件
r /path/from/somefile:讀取指定文件的文本至模式空
間中匹配到的行后
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
v s///:查找替換,支持使用其它分隔符,s@@@,s###
v 替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
v sed ‘2p’ /etc/passwd
v sed –n ‘2p’ /etc/passwd將第二行打印出來
v sed –n ‘1,4p’ /etc/passwd 1到4行顯示出來
v sed –n ‘/root/p’ /etc/passwd
v sed –n ‘2,/root/p’ /etc/passwd 從2行開始
v sed –n ‘/^$/=’ file 顯示空行行號
v sed –n –e ‘/^$/p’ –e ‘/^$/=’ file
v sed ‘/root/a\superman’ /etc/passwd行后
v sed ‘/root/i\superman’ /etc/passwd 行前
v sed ‘/root/c\superman’ /etc/passwd 代替行
v sed ‘/^$/d’ file
v sed ‘1,10d’ file
v nl /etc/passwd | sed ‘2,5d’
v nl /etc/passwd | sed ‘2a tea’
v sed 's/test/mytest/g' example
v sed –n‘s/root/&superman/p’ /etc/passwd 單詞后
v sed –n‘s/root/superman&/p’ /etc/passwd 單詞前
v sed –e ‘s/dog/cat/’ –e ‘s/hi/lo/’ pets
v sed –i.bak ‘s/dog/cat/g’ pets
v 1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的
空白字符
sed -r ‘s/^[[:space:]]+//g’ /etc/grub.conf
v 2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符
sed "s@^#[[:space:]]\+@@g" /etc/fstab
v 3、在/root/install.log每一行行首增加#號
v Sed ‘s/^/#&/g’ /root/install.log
v 4、在/etc/fstab文件中不以#開頭的行的行首增加#號
sed -r “s/^[^#]/#/” /etc/fstab
v 5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
目錄名 echo /etc/fstab/sd | Sed -r ‘@[^/]+/?$@\?@ ’
sed -r "s@\<(.*/+)([^/]+/?)\>@\1@" 目錄名
基名sed -r "s@\<(.*/+)([^/]+)\>@\2@"
echo '/etc/fstab'|Sed -r <a href="mailto:'s@.*/'s@.*\<@@'
后向引用
Dirname 或者 basename
6、利用sed 取出ifconfig命令中本機的IPv4地址
v ifconfig | sed -n "2p" | sed -r 's@.*addr\>:@@' |cut -d " " -f1
v 7、統計centos安裝光盤中Package目錄下的所有rpm文件的 以.分隔倒數第二個字段的重復次數
Ls *.rpm | sed ‘s@\.rpm@@’| sed ‘s@.*\/@@’ | uniq -c
Ls *.rpm | sed -r‘.*\.(.*)\.rpm$@\1@’| sort | uniq -c
原創文章,作者:sjfbjs,如若轉載,請注明出處:http://www.www58058.com/33215