跳轉到內容

LPI Linux 認證/使用正則表示式搜尋文字檔案

來自華夏公益教科書,開放的書本,為開放的世界

詳細目標

[編輯 | 編輯原始碼]

(LPIC-1 版本 5.0)

權重:2

描述
考生應該能夠使用正則表示式來操作檔案和文字資料。本目標包括建立包含多個符號元素的簡單正則表示式,以及理解基本正則表示式和擴充套件正則表示式之間的區別。它還包括使用正則表示式工具在檔案系統或檔案內容中執行搜尋。

關鍵知識領域

  • 建立包含多個符號元素的簡單正則表示式。
  • 瞭解基本正則表示式和擴充套件正則表示式之間的區別。
  • 瞭解特殊字元、字元類、量詞和錨的概念。
  • 使用正則表示式工具在檔案系統或檔案內容中執行搜尋。
  • 使用正則表示式刪除、更改和替換文字。

以下是使用的檔案、術語和實用程式的列表

  • grep
  • egrep
  • fgrep
  • sed
  • regex(7)

模式匹配

[編輯 | 編輯原始碼]

有兩種模式匹配

  • 萬用字元(檔名生成)
  • 正則表示式

萬用字元主要應用於當前目錄或子目錄中使用時。當萬用字元 *, ?, [ - ], ~ 和 ! 在正則表示式中使用時,它們不再生成檔名。

使用正則表示式的一些實用程式是

  • grep, egrep
  • vi
  • more
  • sed
  • Perl

所有能夠使用正則表示式的實用程式使用的有限正則表示式搜尋模式。

  • 任意一個字元 . Ab.a Abla 或 Abca
  • 一個字元集 [ ] Ab[sd]a Absa 或 Abda 僅此而已
  • 一個字元範圍 [ - ] Ab[a-z]a Abaa 或 Abba 或 ...
  • 不在集合中 [^ ] Ab[^0-9]a Abaa 或 Abba 或 ...
  • 零個或多個 * Ab*a Absala 或 Aba 或 ...
  • 行首 ^ ^Aba 行首>Aba
  • 行尾 $ Aba$ Aba<行尾
  • 字面量 \ Aba\$ Aba$

例子

Ab[0-3]s
^Ab\^bA
[01]bin$
^..\\
[^zZ]oro

所有使用正則表示式的實用程式使用的有限正則表示式組合。

  • 任何字串 .* Ab.*a Abrahma 或 Abaa 或 ...
  • 從 [ ]* th[aersti]* 開始的字串 There 或 This 或 ...
  • 多範圍 [ - - ] Ab[0-2][a-c]a Ab0aa 或 Ab1aa 或 ...
  • 匹配 \ \\ \\[a-zA-Z]* \Beethoven

示例

Ab[0-3][a-z]s
...$
^[01]\^2
[0-9][a-z] \$
[a-zA-Z]*
^[^c-zC-Z]*
^[a-zA-Z0-9]$

修飾符模式 替換由正則表示式模式匹配的字串

  • 匹配 m \{m\} b[0-9]\{3\} b911
  • 一個或多個 \{m,\} b[0-9]\{2,\} b52
  • 最多 n \{m,n\} b[0-9]\{2,4\} b1234
  • 單詞開頭 \< \<wh where
  • 單詞結尾 \> [0-9]\> bin01

要查詢檔案中的文字,請使用 grep。

grep [options] [string] [files]

最好引用字串以防止誤解。

常見選項

  • -i: 忽略大小寫
  • -E: 擴充套件,使用正則表示式
  • -l: 僅在至少有一個匹配項時列出檔名
  • -c: 僅顯示匹配行的計數
  • -n: 也顯示行號
  • -v: 不匹配。

示例

grep host /etc/*.conf
grep -l '\<mai' /usr/include/*.h
grep -n toto /etc/group
grep -vc root /etc/passwd
grep '^user' /etc/passwd
grep '[rR].*' /etc/passwd
grep '\<[rR].*' /etc/passwd

要對流應用命令,請使用 sed。

sed [address1][,address2][!]command[options] [files...]

sed 程式將從檔案中的 address1 到 address2 應用命令。address1 和 address2 格式是正則表示式。

sed 程式是一個非互動式編輯工具。

示例

sed '1,3s/aa/bb/g' file               # Replace in file from lines 1 to 3 'aa' with 'bb'.
sed '/here/,$d' file                  # Delete line from here to the end.
sed '/here/d' file                    # Delete lines including the word 'here'.
sed '1,/xxx/p' file                   # Print lines 1 to xxx.
sed '/ll/,/ff/!s/maison/house/g' file # In file replace words 'maison' with 'house' excluding lines from ll to ff.
  1. 處理你的 bookmarks.html 檔案以生成一個檔案 mywebsites.txt,其中只包含網站的標題。
  2. 將 /etc 中的所有檔案複製到你的 home 目錄中的 etc/。透過將 'host' 替換為 'machine' 來顯示所有 *.conf 檔案的內容。
  3. 顯示所有不包含 'root' 字樣的 *.conf 檔案的內容。使用 grep 和 sed 的命令是什麼?
  4. 打印出 root 所屬的所有組名。
  5. 列出所有長度為 4 或 5 個字元的組名。
  6. 列出所有包含沒有空格的字元行(空行)的檔案。
  7. 在 etc/ 目錄中列出所有包含數字字元的檔案。
  8. 使用 ls 僅列印 / 中的目錄名。
  9. 執行“ps -aux”並將使用者 r_polto 替換為 root,並將其列印到名為 new_process.txt 的檔案中。
  10. 列出所有由以“p”或“P”開頭的使用者名稱擁有的名為 'apache' 的程序。


華夏公益教科書