鍍金池/ 教程/ Linux/ Sed實用功能
Sed字符串
Sed實用功能
Sed管理模式
sed環(huán)境設(shè)置
sed模式緩沖區(qū)
Sed循環(huán)
Sed模式范圍
Sed教程
Sed正則表達(dá)式
Sed分支
Sed基本語法
sed工作流程
Sed特殊字符
Sed基本命令

Sed實用功能

SED是一個了不起的工具,它允許多種方式來解決問題。 GNU/ Linux提供了許多有用的實用程序來執(zhí)行日常的日常任務(wù)。讓我們模擬使用Sed幾個實用程序。

考慮我們有一個文本文件books.txt將要被處理,它有以下內(nèi)容:

A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho
The Fellowship of the Ring, J. R. R. Tolkien
The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin

Cat 命令

在下面的示例中,每行被打印作為默認(rèn)工作流程的一部分。

[jerry]$ sed '' books.txt 

執(zhí)行上面的代碼,會得到如下結(jié)果:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin 

下面的示例使用打印命令來顯示文件內(nèi)容。

[jerry]$ sed -n 'p' books.txt 

執(zhí)行上面的代碼,會得到如下結(jié)果:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

刪除空行

在以下示例中,“^$”意味著空行,并且當(dāng)一個模式匹配成功的空行被刪除。

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'

執(zhí)行上面的代碼,會得到如下結(jié)果:

Line #1 
Line #2 

同樣,下面的例子打印僅當(dāng)它是一個非空的行。

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed -n '/^$/!p'

執(zhí)行上面的代碼,會得到如下結(jié)果:

Line #1 
Line #2

從C++程序中刪除注釋行

我們創(chuàng)建一個簡單的C++程序。

#include <iostream> 
using namespace std; 
int main(void) 
{ 
   // Displays message on stdout. 
   cout >> "Hello, World !!!" >> endl;  
   return 0; // Return success. 
}

現(xiàn)在,刪除使用下面的正則表達(dá)式的注釋行。

[jerry]$ sed 's|//.*||g' hello.cpp

執(zhí)行上面的代碼,會得到如下結(jié)果:

#include <iostream>
using namespace std; 
int main(void) 
{ 
   cout >> "Hello, World !!!" >> endl; 
   return 0;  
} 

添加注釋在某些行前

下面的示例中的行號3?5之前添加注釋。

[jerry]$ sed '3,5 s/^/#/' hello.sh 

執(zhí)行上面的代碼,會得到如下結(jié)果:

#!/bin/bash 
#pwd 
#hostname 
#uname -a 
who 
who -r 
lsb_release -a

wc -l 命令

Unix的"wc -l" 命令的計數(shù)存在于文件中的行數(shù)。下面的sed表達(dá)式模擬相同。

[jerry]$ sed -n '$ =' hello.sh 

執(zhí)行上面的代碼,會得到如下結(jié)果:

8 

head 命令

默認(rèn)情況下,Unix的head命令打印前3行的文件。讓我們模擬Sed相同的行為。

[jerry]$ sed '3 q' books.txt 

執(zhí)行上面的代碼,會得到如下結(jié)果:

A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho

tail -1 命令

Unix的“tail -1”打印文件的最后一行。下面的語法顯示了模擬。

[jerry]$ sed -n '$p' books.txt

執(zhí)行上面的代碼,會得到如下結(jié)果:

A Game of Thrones, George R. R. Martin

dos2unix 命令

在DOS環(huán)境下,換行符是由CR/LF字符的組合表示。 “DOS2UNIX”命令下面的模擬將一個DOS換行符UNIX換行符。在GNU/Linux中,這個角色往往被視為“^M”(控制M)字符。

[jerry]$ echo -e "Line #1\r\nLine #2\r" > test.txt 
[jerry]$ file test.txt

執(zhí)行上面的代碼,會得到如下結(jié)果:

test.txt: ASCII text, with CRLF line terminators 

讓我們用Sed模擬命令。

# Press "ctrl+v" followed "ctrl+m" to generate 
[jerry]$ sed 's/^M$//' test.txt > new.txt
"^M" character. 
[jerry]$ file new.txt

執(zhí)行上面的代碼,會得到如下結(jié)果:

new.txt: ASCII text 

現(xiàn)在讓我們顯示該文件的內(nèi)容。

[jerry]$ cat -vte new.txt 

執(zhí)行上面的代碼,會得到如下結(jié)果:

Line #1$ 
Line #2$

unix2dos 命令

類似“dos2unix”,有“unix2dos”命令,它把UNIX換行符到DOS換行符。下面的例子顯示了模擬相同。

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ file test
            
上一篇:Sed分支下一篇:Sed基本語法