技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

grep+sed對文本操作比Python腳本快幾個數(shù)量級

作者:admin    時間:2021-12-14 11:21:26    瀏覽:

在 Linux 中,談論基本的文本搜索和操作時,grepsed 命令往往會出現(xiàn)。grep 是基于行的搜索實用程序,主要用于從一個或多個文件中返回與特定搜索詞匹配的行。sed 是類似的,因為它是一個逐行樣式的實用程序,但更多的是用于文本行內的字符串替換。在某些情況下,許多高級用戶會將 grep 的搜索功能與 sed 的替換功能相結合,以實現(xiàn)比 Python 腳本快幾個數(shù)量級的高效文本操作。

grep+sed對文本操作比Python腳本快幾個數(shù)量級

grep

grep 是一個逐行搜索實用程序,它將查看文件的每一行并檢查與給定搜索詞的匹配項。

假設你有一個未排序的文件(或多個文件)名稱。

Kumail Nanjiani
Thomas Middleditch
Amanda Crew
Josh Brener
T.J. Miller
Zach Woods
Martin Starr
Josh Chang

然后假設你只想列出名字為“Josh”的人,你可以編寫一個簡單的 grep 命令來執(zhí)行此操作。grep 命令的基本語法是匹配器(例如搜索詞)和搜索空間(例如一個或多個文件)。

grep 'Josh .*' names.txt

Josh Brener
Josh Chang

在上面的示例中,grep 將匹配在文件 names.txt 中,以單詞“Josh”開頭,后跟一個空格字符的任意字符組合的行。

sed

sed 也是一種基于行的工具,最常用于將指定文件中出現(xiàn)的一組字符替換為另一組字符。下面例子是在文件中用“JOSH”替換所有出現(xiàn)的“Josh”這個詞。

sed 's/Josh/JOSH/' names.txt

JOSH Brener
JOSH Chang

現(xiàn)在假設我們想從 grep 示例中獲取我們的名稱列表并對其進行操作,以便名稱采用 Last, First 格式。我們可以用 sed 來做到這一點,用括號將匹配器的部分括起來,以便記住它們以備后用。

sed 's/\(.*\) \(.*\)/\2, \1/' names.txt

我們將第一個 .* 匹配器括在括號中以記住空格字符之前的字符序列,然后用第二組括號記住空格之后的所有字符。我們在命令的替換部分重放它們,/1 表示第一個記住的模式,/2 作為我們的第二個記住的模式。

Nanjiani, Kumail
Middleditch, Thomas
Crew, Amanda
Brener, Josh
Miller, T.J.
Woods, Zach
Starr, Martin
Chang, Josh

結合 grep 和 sed

grepsed 的真正強大之處在于結合了 grep 的行匹配和 sed 的替換功能。所以在我們之前的名字示例中,如果我們想搜索一個文件,只獲取名字是 Josh 的人,然后將它們格式化為 Last, First,我們可以獲取 grep 命令的輸出并將其用作 sed 的輸入帶有 UNIX 管道字符的命令。

grep '^Josh .*$' names.txt | sed 's/\(.*\) \(.*\)/\2, \1/'

Brener, Josh
Chang, Josh

關于正則表達式的說明

grepsed 都使用正則表達式(簡稱 regex)來定義要匹配的字符序列,以及如何匹配它們的規(guī)則。

編寫正則表達式匹配器本身就是一門學科,但在某種程度上肯定是一項技能??梢栽诒疚闹姓业接嘘P正則表達式的更多信息,Linux修改文件內容命令sed對特殊字符的寫法。

標簽: grep  sed  linux技術  
x
  • 站長推薦
/* 左側顯示文章內容目錄 */