使用 sed 命令輕松完成文本替換、插入和刪除操作
在 Linux 系統(tǒng)中,sed 是一個(gè)非常強(qiáng)大的流編輯器,用于在文件或數(shù)據(jù)流中進(jìn)行文本處理。sed 命令最主要的功能包括查找、替換、插入和刪除文本,可以結(jié)合正則表達(dá)式完成復(fù)雜的文本編輯任務(wù),非常適用于日志分析、文件批處理和腳本自動(dòng)化等場景。
1. 基本語法
sed 的基本語法如下:
sed [options] 'command' file
常用選項(xiàng)說明:
? -e:允許多次使用 sed 的編輯命令。
? -i:直接修改文件(原地編輯)。
? -n:不自動(dòng)打印模式空間中的行,常和 p 配合用于只打印匹配的行。
2. 基本命令與示例
2.1 替換文本
sed 中最常用的操作就是替換文本。s 命令用于替換匹配的字符串。
sed 's/old/new/' file.txt
這條命令會(huì)將文件 file.txt 中的第一個(gè) old 替換為 new。如果希望替換行中所有匹配的內(nèi)容,可以使用全局替換標(biāo)志 g:
sed 's/old/new/g' file.txt
例如,假設(shè)有一個(gè)日志文件 log.txt,我們需要將其中的所有 ERROR 替換成 WARN:
sed 's/ERROR/WARN/g' log.txt
2.2 直接修改文件(原地編輯)
可以使用 -i 選項(xiàng)直接修改文件,而不是輸出結(jié)果:
sed -i 's/old/new/g' file.txt
這條命令會(huì)在文件 file.txt 中永久替換所有的 old 為 new,不用將輸出重定向到另一個(gè)文件。
2.3 替換帶有分隔符的文本
如果替換的文本中帶有 /,可以選擇其他分隔符來避免沖突。例如,用豎線 | 作為分隔符:
sed 's|/usr/local/bin|/opt/bin|' file.txt
3. 查找并打印文本
3.1 查找并顯示匹配行
可以使用 -n 和 p 配合打印包含特定內(nèi)容的行。例如,打印包含 “error” 的行:
sed -n '/error/p' file.txt
3.2 顯示文件特定行
sed 還可以基于行號(hào)打印特定行。以下命令打印文件的第 5 行:
sed -n '5p' file.txt
要打印從第 3 行到第 7 行的數(shù)據(jù):
sed -n '3,7p' file.txt
4. 插入與刪除
4.1 插入文本
可以使用 i 命令在指定行之前插入文本:
sed '2i\Insert this line' file.txt
這會(huì)在文件 file.txt 的第 2 行前插入 “Insert this line”。
4.2 刪除文本
使用 d 命令可以刪除指定行,例如刪除第 2 行:
sed '2d' file.txt
要?jiǎng)h除文件的空行:
sed '/^$/d' file.txt
5. 結(jié)合正則表達(dá)式進(jìn)行高級(jí)操作
5.1 使用正則替換復(fù)雜模式
假設(shè)要將所有數(shù)字替換成 #,可以用正則表達(dá)式:
sed 's/[0-9]/#/g' file.txt
5.2 刪除特定模式的行
例如,要?jiǎng)h除所有包含 “ERROR” 的行:
sed '/ERROR/d' file.txt
6. sed 命令的實(shí)戰(zhàn)示例
示例1:批量替換文件內(nèi)容
假設(shè)我們有一批 HTML 文件,需要將其中所有的 http:// 修改為 https://,可以用以下命令:
sed -i 's|http://|https://|g' *.html
示例2:日志清洗與分析
假設(shè)有一個(gè)日志文件 access.log,我們需要將所有訪問 IP 地址匿名化(隱藏最后一段 IP):
sed -E 's/([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/\1.xxx/g' access.log
示例3:快速查看配置文件的特定字段
假設(shè)有一個(gè)配置文件 config.ini,我們只想查看以 db_ 開頭的配置項(xiàng):
sed -n '/^db_/p' config.ini
7. 小結(jié)
sed 是一個(gè)功能強(qiáng)大、靈活的文本處理工具,適合處理大規(guī)模的文本替換和處理任務(wù)。在自動(dòng)化腳本中,sed 可以幫助我們快速完成復(fù)雜的文本操作,是系統(tǒng)管理員和開發(fā)人員的利器。在使用 sed 時(shí),需要注意正則表達(dá)式的語法和命令的參數(shù),以確保得到預(yù)期的輸出效果。