国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

shell復習筆記----查找與替換

2024-06-28 13:20:17
字體:
來源:轉載
供稿:網友
shell復習筆記----查找與替換

查找文檔

以grep 程序查找文本(匹配文本 matching text)相當方便.傳統上有三種程序可以用來查找整個文本文件.

  • grep 最早的文本匹配程序.其最簡單的方式就是使用固定字符串
    $ who |grep -F austen     //范例中使用- F 選項,以查找固定字符串 austen.

    事實上,只要匹配的模式里未含有正則表達式的 meta 字符(metacharacter),則 grep 默認行為模式就等同于使用了-F.

    $ who |grep austen
  • egrep 擴展式 grep.這個程序使用擴展正則表達式--這是一套功能更強大的正則表達式,使用它的代價是好屌更多的運算資源.
  • fgrep 快速 grep(Fast grep).這個版本匹配固定字符串而非正則表達式,它使用優化的算法,能更有效匹配固定字符串.
grep語法:    grep [ options ...] pattern - spec [ files ...]用途:     現實匹配一個或者多個模式的文本行.時常會作為管道(pipeline)的第一步,以便于對匹配的數據做進一步處理.主要選項:      - E 使用擴展正則表達式進行匹配. grep -E可以取代傳統的 egrep.      - F 使用固定字符串進行匹配. frep -F可取代傳統的 fgrep 命令      - e  pat-list 通常,第一個非選項的參數會指定要匹配的模式      - f  pat -file 從 pat -file 文件讀取模式作匹配.      - i  模式匹配時忽略大小寫差異.      - l  流出匹配模式的文件名稱,而不是打印匹配的行.      - q  靜默地.摸過模式匹配成功則 grep 會成功地離開,而不將匹配的行寫入標準輸出;否則即使不成功.      - s  不顯示錯誤信息,通常與- q 并用.      - v  顯示不匹配模式的行行為模式:      讀取命令行上知名的每個文件.如果匹配查找模式的行時,將它顯示出來.檔知名多個文件時, grep 會在每一行前面加上文件名與一個冒號.默認使用 BRE.警告:     你可以使用多個-d 與 -f 選項,建立要查找的模式列表.

正則表達式

正則表達式是一種表示方式,讓你可以查找匹配特定準則的文本.此表示法讓你可以寫一個表達式,選定或匹配多個數據字符串.從根本上看,正則表達式是由兩個基本組成部分所建立:一般字符與特殊字符.一般字符指的是任何沒有特殊意義的字符;某些情況下,特殊字符也可以視為一般字符,特殊字符常稱為元字符(metacharacter,簡稱 meta).

除了傳統的 UNIX 正則表達式之外, POSIX 正則表達式還可以做到:

  • 編寫正則表達式,它表示特定于 locale 的字符序列順序和等價字符
  • 編寫正則表達式,而不必關心系統底層的字符集是什么.

POSIX 的正則表達式有兩種:基本正則表達式(BRE)以及擴展正則表達式(ERE).通常 ERE 比 BRE 功能更強大,不過不見得任何情況下都是這樣.正則表達式對程序執行時的 locale 環境相當敏感;方括號表達式里的范圍應避免使用,改用字符集,例如[[: alnum:]]較佳.另外許多 GNU 程序都有額外的 meta 字符.

字符BRE/ERE模式含義
/兩者都可通常用以關閉后續字符的特殊意義.有時則是相反地打開后續字符的特殊意義,例如/(.../)與/{.../}
.兩者都可匹配任何單個的字符,但 NUL 除外.獨立程序也可以不允許匹配換行字符.
*兩者都可匹配在他之前的任何數目(或沒有)的單個字符.以 ERE 而言,此前置字符可以使正則表達式,例如:因為.(點號)表示任一字符,所以.*代表"匹配任意字符的任一長度".以 BRE 來說,*若至于正則表達式的第一個字符,不具任何特殊意義.
^兩者都可匹配緊接著的正則表達式,在行或字符串的起始處. BRE: 僅在正則表達式的開頭處具有此特殊含義; ERE:至于任何位置都具特殊含義
$兩者都可匹配前面的正則表達式,在字符串或行結尾處. BRE: 僅在正則表達式結尾處具特殊含義. ERE:至于任何位置都具有特殊含義.
[...]兩者都可方括號表達式(bracket exPRession),匹配方括號內的任意字符.連字符(-)指的是連續字符的范圍(注意:范圍會因 locale 而有所不同,因此不具可移植性).^符號置于方括號里第一個字符則有反向含義:指的是匹配不在列表內(方括號內)的任何字符.作為首字母的一個連字符或是結束方括號(]),則被視為列表的一部分.所有其他的 meta 字符也列為列表的一部分(也就是:根據其字面上的意義).方括號表達式里可能會含有排序符號
/{n/m}BRE區間表達式(interval expression),匹配在它前面的單個字符重現(occurrences)的次數區間.
/( /)BRE將/( 與/)間的模式存儲在特殊的"保留空間(holding space)".最多可以將9個獨立的子模式(subpattern)存儲在單個模式中.匹配與子模式的文本,可通過轉義序列/1至/9,被重復使用在相同模式里.例如:/( ab/).*1,指的是匹配與 ab 組合的兩次重現,中建科存在任何數目的字符.
/nBRE重復在/(與/)方括號內第 n 個子模式至此點的模式. n 為1至9的數字,1為由左開始.
{n,m}ERE與先前提及的 BRE 的/{n/m}一樣,只不過方括號前沒有反斜杠.
+ERE匹配前面正則表達式的零個或多個實例
?ERE匹配前面正則表達式的零個或一個實例
|ERE匹配于|符號前或后的正則表達式
()ERE匹配于方括號括起來的正則表達式群.

擴展正則表達式

正則表達式的擴展

程序與正則表達式

在文本文件里進行替換

很多 shell 腳本的工作都從通過 grep 或 egrep取出所需的文本開始.正則表達式最初結果,往往就成了要拿來做進一步處理的"原始數據(raw data)".通常文本替換(text substitution)至少需要做一件事,就是將一些字以另一些字代替,或者是刪除匹配航的某個部分.

一般來說,執行文本替換的正確程序應該是 sed---流編輯器(Stream Editor).sed 的設計就是用來以批處理的方式而不是用交互的方式將來編輯文件. sed 存在的目的就在這里.雖然你也可以使用 ed 或者 ex 編輯腳本,但用他們處理會比較麻煩,通常用戶不會記得要存儲原來的文件.

sed 是處理簡單字符串替換的主要工具,大部分的 Shell腳本在使用 sed 時幾乎都是用來做替換的操作."從左邊開始,擴展至最長(longest leftmost)"這個法則描述了匹配的文本在何處匹配以及匹配擴展到多長.

sed語法:      sed [ -n ] 'edition command' [file ...]      sed [ -n ] -e 'editing command'... [ file ...]       sed [ -n ] -f script -file ... [file ...]用途:     為了編輯它的輸入流,將結果生成到標準輸出,而非以交互式編輯器的方式拉編輯文件.雖然 sed 命令很多,能做很復雜的工作,但它常用的還是處理數據流的文本替換,通常作為管道的一部分.主要選項:     -e 'editing command'     將 editing command 使用在輸入數據上.當有多個命令需應用時,就必須使用-e 了.      -f script -file       自  script -file 中讀取編輯命令.當有多個命令需要執行時,該選項相當有用.          -n      不是每個最后已修改結果都正常打印,而是現實以 p 指定(處理過的)行.行為模式:      讀取每個輸入文件的每一行,加入沒有文件的話,則是標準輸入.以每一行來說, sed 會執行每一個應用到輸入航的 editing command.結果會寫到標準輸出(默認狀態下,或是現實以 p 命令及-n 選項).若無-e 或- f 選項,則 sed 會把第一個參數看作是要使用的 editing command.

find /home/tolstoy -type d -print   |  尋找所有目錄sed 's;/home/tolstoy/;/home/lt/;'  |  修改名稱:注意這里使用分號作為定界符sed 's/^/mkdir /'                          |  插入mkdir 命令sh -x                                              以 shell 跟蹤模式執行

上述腳本是講/ home/tolstoy 目錄結構建立一份副本在/home/lt 下(可能是為備份而做的準備).


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘潭县| 肥乡县| 泸水县| 扶沟县| 德化县| 普格县| 盘锦市| 安泽县| 雅江县| 平谷区| 潜山县| 孟州市| 大关县| 定安县| 双柏县| 武夷山市| 屏边| 临邑县| 泸溪县| 滕州市| 任丘市| 普格县| 阿拉善右旗| 新安县| 筠连县| 霞浦县| 双牌县| 阜康市| 绥滨县| 佛山市| 平原县| 郁南县| 西乡县| 太保市| 黑河市| 锦屏县| 夏津县| 安乡县| 民勤县| 黄浦区| 肇东市|