grep 和 sed:linux经常使用工具 amp; 基本正則表達式
grep 見鏈接:http://www.cyberciti.biz/faq/grep-regular-expressions/
sed參考文章:http://www.thegeekstuff.com
sed工作原理
This is called as one execution cycle. Cycle continues till end of file/input is reached:
1. Read a entire line from stdin/file.
2. Removes any trailing newline.
3. Places the line, in its pattern buffer.
4. Modify the pattern buffer according to the supplied commands.
5. Print the pattern buffer to stdout.
sed使用語法:
sed [-nefri] [命令]
描寫敘述:
-n :使用安靜(silent)模式。在一般 sed 的使用方法中,全部來自 STDIN 的數(shù)據(jù)一般都會(huì)被列出到終端上。
但假設(shè)加上 -n 參數(shù)后。則僅僅有經(jīng)過sed 特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來。
-e :直接在命令列模式上進(jìn)行 sed 的動(dòng)作編輯。
-f :直接將 sed 的動(dòng)作寫在一個(gè)文件內(nèi)。 -f filename 則能夠運(yùn)行 filename 內(nèi)的 sed 動(dòng)作。
-r :sed 的動(dòng)作支持的是延伸型正規(guī)表示法的語法。(默認(rèn)是基礎(chǔ)正規(guī)表示法語法)
-i :直接改動(dòng)讀取的文件內(nèi)容。而不是輸出到終端。
匹配的的格式(行號(hào),模式字符串):
ADDRESS(行號(hào)):
n : 匹配第幾行
m,n : 從m到n行
m~n :從m行開始。每隔n行
'$' : 最后一行
PATTERN(字符串):
/sometext/ : 匹配有sometext字符串的行
sed -n 'ADDRESS'p filename // print, e.g: sed -n '4'p text.txt。
'ADDRESSp',即將p放在單引號(hào)中也是能夠的。或者將單引號(hào)換成雙引號(hào)"ADDRESSp"也是一樣,下同。
sed -n '/PATTERN/p' filename // e.g: sed -n '/aa/p' text.txt sed -n 'ADDRESS'd filename //delete,不會(huì)刪除文件里的內(nèi)容。僅僅是在標(biāo)準(zhǔn)輸出中刪除該行。 sed -n '/PATTERN/d' filename sed 'ADDRESS a\ some text' filename //append,在匹配行的下一行加入"some text",注意單引號(hào) sed '/PATTERN/ a\ some text' filename sed 'ADDRESS i\ some text' filename // insert,在匹配行前插入一行 sed '/PATTERN/ i\ some text' filename sed 'ADDRESS c\ some text' filename // 替換匹配行 sed 'PATTERN c\ some text' filename sed -n 'ADDRESS'= filename //打印匹配的行號(hào), 僅僅接受一個(gè)地址,假設(shè)打印多行使用{}括起來,例如以下 sed -n 'ADDRESS,/PATTERN/ { = p }' filename運(yùn)行多條sed命令
sed -e: use multiple -e options to build up a script out of many parts。
-e option is optional for sed with single command. sed will execute the each set of command while processing input from the pattern buffer
-e script, --expression=script
add the script to the commands to be executed樣例:
sed -e 's/foo/bar/' -e '/FOO/d'
解釋:先用bar替換foo,然后再刪除有字符串FOO的行
sed 正則表達(dá)式查找和替換:
's' 命令應(yīng)該是sed中最重要的命令,語法例如以下:
sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename樣例:
sed '1s/aa/bb/' text.txt //用bb替換aa。僅僅在aa第一次出現(xiàn)的地方進(jìn)行替換 sed '2s/aa/bb/' text.txt //用bb替換aa,僅僅在aa第二次出現(xiàn)的地方進(jìn)行替換 sed 's/aa/bb/g' text.txt //用bb替換aa。g(global )是全局替換的意思。不加g默認(rèn)也是全局替換。 sed -n 's/aa/bb/gpw result.txt' text.txt //g全局替換,p打印,w將替換結(jié)果寫到result.txt文件里sed 's/...$//' text.txt //正則表達(dá)式匹配:將最后位置的前三個(gè)字符替換為空。即刪除每行的最后三個(gè)字符。基本正則表達(dá)式
. : 代表隨意單個(gè)字符
演示樣例: a.b : 表示acb/a*b/a b/a9b… 都能夠但不能是accb/ab
[] : 指定范圍內(nèi)的單個(gè)字符
演示樣例: a[c|d]b : 表示acb/adb 其它的都不能夠
[^ ] : 取反。非指定范圍內(nèi)的單個(gè)字符
演示樣例:a[^d]b : 表示除了adb 其它的acb/abb/a b…都能夠
? : 反復(fù)前邊的字符0次或1次
演示樣例:a?b : 表示ab/aab 其它的都不能夠
* : 反復(fù)前邊的字符無限次
演示樣例:a* : 表示a/aa/aaa/aaaa… 能夠反復(fù)a無限次
.* : 隨意長(zhǎng)度的隨意字符
演示樣例:a.* : 表示a/ac/acc/a,b … 能夠是a后邊跟隨意字符
\{m,n\} : 反復(fù)前邊的字符至少m次,最多n次。必須加上反斜杠轉(zhuǎn)義
演示樣例:a{1,3} : 表示 a/aa/aaa 能夠反復(fù)a最少1次最多3次
\{m,\} : 反復(fù)前邊的字符至少m次,必須加上反斜杠轉(zhuǎn)義
演示樣例:a{2,} : 表示aa/aaa/aaaa… 能夠反復(fù)a最少2次最多不限
\{0,n\} : 反復(fù)前邊的字符最多n次,必須加上反斜杠轉(zhuǎn)義
演示樣例:a{0,3} : 表示 空/a/aa/aaa 能夠反復(fù)a最多3次也能夠不反復(fù)也就是空
\{m\} : 反復(fù)前邊的字符精確匹配m次,必須加上反斜杠轉(zhuǎn)義
演示樣例:a{2} : 表示 aa 精確匹配反復(fù)a2次
^ : 行首匹配,必須出如今行首
演示樣例:^a : 表示全部以a開頭的行
$ : 行尾匹配。必須出如今行尾。注意詞尾與行尾的差別
演示樣例:a$ :表示全部以a結(jié)尾的行
^$ : 空白行
\< : 詞首匹配。必須出如今詞首
演示樣例:\< a : 表示a/acv/abcc… 全部以a開頭的單詞
\> : 詞尾匹配,必須出如今詞尾,注意詞尾與行尾的差別
演示樣例:a> : 表示a/cda/cca/… 全部以a結(jié)尾的單詞
\(\) : 分組字符,可用\1引用左數(shù)第一個(gè)(中包括的內(nèi)容
演示樣例: a\(abc\)\1 表示:aabcabc \1引用了()中的abc
[ :upper: ] : 單個(gè)隨意大寫字母,注意[]與:之間有個(gè)空格,下同
演示樣例:a[:upper:] 表示:aA/aB/aC… a后邊跟隨意一個(gè)大些字母
[ :lower: ] : 單個(gè)隨意小寫字母
[ :space: ] : 單個(gè)空白字符
[^[ :space: ]] : 單個(gè)非空白字符
[ :digit: ] : 單個(gè)隨意數(shù)字0-9
演示樣例:a[:digit:]b 表示: a0b/a1b/a2b… a和b中間跟隨意一個(gè)0-9的數(shù)字
[ :alpha: ] : 單個(gè)隨意字母
[ :alnum: ] : 單個(gè)隨意字母或數(shù)字
[:punct:] : 單個(gè)隨意特殊符號(hào)
擴(kuò)展正則表達(dá)式元字符:
擴(kuò)展正則表達(dá)式簡(jiǎn)化了基本正則中的一個(gè)元字符。又添加了幾個(gè)。
\{m,n\} → {m,n} : 使用方法與基本正則中的一樣
演示樣例:a{1,3} 表示: a/aa/aaa
\(\) → () : 使用方法與基本正則中的一樣
演示樣例:(abc)\1 表示:abcabc
+ : 匹配前邊的字符一次或多次
演示樣例:a+ 表示: a/aa/aaa/aaaa…
| 表示或
演示樣例:(a|b)c 表示: ac/bc
轉(zhuǎn)載于:https://www.cnblogs.com/mfrbuaa/p/5223027.html
總結(jié)
以上是生活随笔為你收集整理的grep 和 sed:linux经常使用工具 amp; 基本正則表達式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP - 图像处理
- 下一篇: clientX和clientY属性需要注