1. 程式人生 > >Sed 命令替換檔案內容

Sed 命令替換檔案內容

Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案中的字串。

命令如下:sed -i “s/原字串/新字串/g” `grep 原字串 -rl 所在目錄`

例如:我要把 charset=gb2312 替換為 charset=UTF-8,執行命令:sed -i “s/charset=gb2312/charset=UTF-8/g” ‘grep charset=gb2312 -rl /www’ 即可。

解釋一下:

-i 表示inplace edit,就地修改檔案

-r 表示搜尋子目錄

-l 表示輸出匹配的檔名

這個命令組合很強大,要注意備份檔案。

關於 sed 的更多說明:

1. sed ‘y/1234567890/ABCDEFGHIJ/’ test_sed

test_sed的內容是:

1234567890

2345678901

3456789012

4567890123

執行後,test_sed的內容是:

ABCDEFGHIJ

BCDEFGHIJA

CDEFGHIJAB

DEFGHIJABC

注意變換關係是按兩個list的位置對應變換

2. 替換每行所有匹配

sed ‘s/01/Ab/g’ test_sed

1234567890

23456789Ab

3456789Ab2

456789Ab23

注意:第一行的0,1沒有分別替換為A,b

刪除:d命令

$ sed ‘2d’ example—–刪除example檔案的第二行。

$ sed ‘2,$d’ example—–刪除example檔案的第二行到末尾所有行。

$ sed ‘$d’ example—–刪除example檔案的最後一行。

$ sed ‘/test/’d example—–刪除example檔案所有包含test的行。

替換:s命令

$ sed ‘s/test/mytest/g’ example—–在整行範圍內把test替換為mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest。

$ sed -n ‘s/^test/mytest/p’ example—–(-n)選項和p標誌一起使用表示只打印那些發生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就列印它。

$ sed ‘s/^192.168.0.1/&localhost/’example—–&符號表示替換換字串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加localhost,變成192.168.0.1localhost。

$ sed -n ‘s/\(love\)able/\1rs/p’ example—–love被標記為1,所有loveable會被替換成lovers,而且替換的行會被打印出來。

$ sed ‘s#10#100#g’ example—–不論什麼字元,緊跟著s命令的都被認為是新的分隔符,所以,“#”在這裡是分隔符,代替了預設的“/”分隔符。表示把所有10替換成100。

選定行的範圍:逗號

$ sed -n ‘/test/,/check/p’ example—–所有在模板test和check所確定的範圍內的行都被列印。

$ sed -n ‘5,/^test/p’ example—–列印從第五行開始到第一個包含以test開始的行之間的所有行。

$ sed ‘/test/,/check/s/$/sed test/’ example—–對於模板test和west之間的行,每行的末尾用字串sed test替換。

多點編輯:e命令

$ sed -e ‘1,5d’ -e ‘s/test/check/’example—–(-e)選項允許在同一行裡執行多條命令。如例子所示,第一條命令刪除1至5行,第二條命令用check替換test。命令的執行順序對結果有影響。如果兩個命令都是替換命令,那麼第一個替換命令將影響第二個替換命令的結果。

$ sed –expression=’s/test/check/’ –expression=’/love/d’ example—–一個比-e更好的命令是–expression。它能給sed表示式賦值。

從檔案讀入:r命令

$ sed ‘/test/r file’ example—–file裡的內容被讀進來,顯示在與test匹配的行後面,如果匹配多行,則file的內容將顯示在所有匹配行的下面。

寫入檔案:w命令

$ sed -n ‘/test/w file’ example—–在example中所有包含test的行都被寫入file裡。

追加命令:a命令

$ sed ‘/^test/a\\—>this is a example’ example<—–‘this is a example’被追加到以test開頭的行後面,sed要求命令a後面有一個反斜槓。

插入:i命令

$ sed ‘/test/i\\

new line

————————-‘ example

如果test被匹配,則把反斜槓後面的文字插入到匹配行的前面。

下一個:n命令

$ sed ‘/test/{ n; s/aa/bb/; }’ example—–如果test被匹配,則移動到匹配行的下一行,替換這一行的aa,變為bb,並列印該行,然後繼續。

變形:y命令

$ sed ‘1,10y/abcde/ABCDE/’ example—–把1–10行內所有abcde轉變為大寫,注意,正則表示式元字元不能使用這個命令。

退出:q命令

$ sed ’10q’ example—–列印完第10行後,退出sed。

保持和獲取:h命令和G命令

$ sed -e ‘/test/h’ -e ‘$Gexample—–在sed處理檔案的時候,每一行都被儲存在一個叫模式空間的臨時緩衝區中,除非行被刪除或者輸出被取消,否則所有被處理的行都將列印在螢幕上。接著模式空間被清空,並存入新的一行等待處理。在這個例子裡,匹配test的行被找到後,將存入模式空間,h命令將其複製並存入一個稱為保持快取區的特殊緩衝區內。第二條語句的意思是,當到達最後一行後,G命令取出保持緩衝區的行,然後把它放回模式空間中,且追加到現在已經存在於模式空間中的行的末尾。在這個例子中就是追加到最後一行。簡單來說,任何包含test的行都被複制並追加到該檔案的末尾。

保持和互換:h命令和x命令

$ sed -e ‘/test/h’ -e ‘/check/x’ example —–互換模式空間和保持緩衝區的內容。也就是把包含test與check的行互換。

相關推薦

Sed 命令替換檔案內容

Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案中的字串。 命令如下:sed -i “s/原字串/新字串/g” `grep 原字串 -rl 所在目錄` 例如:我要把 charset=gb2312 替換為 charset=UTF-8,執行命令:

grep、sed批量替換檔案內容shell

最近做測試環境容器化,每個專案的環境變數單獨一個檔案,昨天要把wap專案 ons mq服務的環境變數批量替換成新的(之前同事留下的坑) 把WAP dockerfile目錄下的環境變數批量替換掉, 思路:不用每行手動輸入,先把需要替換的變數寫入一個檔案./env ,使用shell讀取檔案每

ssh遠端執行sed -i命令,替換內容中含有雙引號的問題

在ssh 中執行sed -i 來替換匹配的字串,當替換的內容中包含雙引號"時,需要在轉義的同時,加上單引號'\"' 示例如下 <?xml version="1.0" encoding="UTF-8"?> <channel name=

linux下用命令批量修改替換檔案內容

在linux入侵之後,我們要清除留下的一些痕跡,比如apache留下的日誌.但是對於ssh登陸日誌比如/var/log/wtmp 和 lastlog這類二進位制檔案,sed命令就愛莫能助了. Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案

[常用shell命令] 批量替換檔案內容和檔名

1. 批量替換指定多個檔案的檔案內容 在指定目錄/your/path裡,查詢包含old_string字串的所有檔案,並用new_string字串替換old_string字串。 sed -i "s/old_string/new_string/g" `grep old_st

linux使用grep命令根據檔案內容搜素檔案

如果你想在當前目錄下 查詢"hello,world!"字串,可以這樣: grep -rn "hello,world!" * 命令格式: grep -[選項] “pattern” 檔案或目錄 選項 含義

批處理替換檔案內容

@echo off setlocal enabledelayedexpansion (for /f "skip=3 tokens=1* delims=-" %%a in (Cases.xml) do ( if "%%b"=="" ( echo %%a ) else ( ec

linux 批量替換檔案內容及查詢某目錄下所有包含某字串的檔案(批量修改檔案內容

sed replace word / string syntax The syntax is as follows: C程式碼   sed -i 's/old-word/new-word/g' *.txt   GNU sed command can edit files in place (

vi命令——修改檔案內容

以下內容轉載自http://blog.csdn.net/bruce0532/article/details/7842384   vi編輯器是所有Unix及Linux系統下標準的編輯器,介紹一下它的用法和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其

ubuntu上按檔名查詢並替換檔案內容

向ubuntu上進行開發或者部署,有可能遇到對某一個目錄下各級子目錄中有可能存在的某些檔案內容進行替換,比如替換某些檔案中的某一個字串。 要實現這個功能,有多種實現方式,比如可以寫一個指令碼檔案遍歷指定目錄下的各級子目錄,並對目錄中符合指定條件的檔案進行內容替換處理。 u

word vba批量替換檔案內容並批量修改檔名

最近在工作中遇到某一資料夾下的許多檔案,名字和內容有大量需要替換,一個個手工替換很麻煩,於是修改了一段程式碼: Sub 批量更改word要素編號及檔名() '此程式碼為指定資料夾中所有選取的WORD檔案的進行格式設定 Dim MyDialog As FileDialog,

C/C++11 正則表示式替換檔案內容

直接上程式碼,YFile只不過是對fstream的封裝 #include <iostream> #include <string> #include <regex> using namespace std; string R

Linux shell sed命令檔案行首行尾新增字元

昨天寫一個指令碼花了一天的2/3的時間,而且大部分時間都耗在了sed命令上,今天不總結一下都對不起昨天流逝的時間啊~~~ 用sed命令在行首或行尾新增字元的命令有以下幾種: 假設處理的文字為test.file 在每行的頭新增字元,比如"HEAD",命令如下: sed '

Linux下tail命令檢視檔案內容

linux ---tail命令 linux中tail命令---用於檢視檔案內容 ,最基本的是cat、more和less。 1. 如果你只想看檔案的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想檢視檔案的後10行,可以使用tail命令,如:tail -10 /etc

Linux中使用sed命令替換字串小結

最近寫了幾個小指令碼用到了sed命令,學了一下,順便記下 sed替換的基本語法為: 複製程式碼 程式碼如下: sed 's/原字串/替換字串/' 單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線”\”進行轉義,但是單引號”‘”是沒有辦法

檔案批量改名和批量替換檔案內容

周海漢 /文 09.12.3 文字操作中經常有整體查詢和替換以及改名的操作,在linux下還是比較方便的,windows下則需要採用特殊工具。下面是linux下一些簡單方法,在ubuntu9.10中除錯通過。 1.批量改名採用命令rename rename 語法: re

Linux中使用sed命令替換字串

文字替換:sed 's#原字串#新字串#g'  file                    s     單獨使用→將每一行中第一處匹配的字串進行替換                    g     每一行進行全部替換→sed指令s的替換標誌之一(全域性替換)sed -i

Linux命令比較檔案內容

檔案準備 建立兩個檔案,分別為a.txt和b.txt,它們所含內容分別為: a.txtb.txt 1-wfhune2-chdamnsbchj3-uyr92fiubkqw5-cgvdnsb 2-djyv4-dvcahsgdb5-wvchdfyt

替換檔案中指定的內容並儲存之sed命令

常用選項:-n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。 -e∶直接在指令列模式上進行 sed 的動作編輯; -f∶

sed 批量替換多個檔案內容

格式: sed -i "s/查詢欄位/替換欄位/g" `grep 查詢欄位 -rl 路徑` linux sed 批量替換多個檔案中的字串 sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 例如: sed -