# sed
*** 使用-i后會真正的修改源文件,否則只是在屏幕上顯示***
`sed [-nie] ‘command’ 文本`
常用選項:
```
-n 只有經過sed處理的那一行(或者動作)才會被打印出來。*** 如果沒有-n,會打印出被修改的以及所有內容 ***
-i 直接修改讀取的檔案內容,而不是由螢幕輸出。
-e 直接在指令列模式上進行 sed 的動作編輯;
```
常用命令:(pdiacs)
```
p ∶打印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作
d ∶刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
a ∶新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c ∶取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
s ∶替換,可搭配正則表達式!如 1,20s/old/new/g
r :讀入,讀取外部文件到匹配行的下面
w :寫出,匹配到的內容寫出到新文件中
```
舉例:(假設我們有一文件名為a.txt,為了測試,隨便寫點東西進去)
`vim a.txt`
```
222 have a good day
333 enjoy every day
44444 two
555555555 efghiljk;mnopqrstuvwxyz
#test lianxi
66666666 ip 127.0.0.1
#test0.0.1
9999988888888
#test
99999999999
#test
bye!
```
刪除某行
```
sed '1d' a.txt #刪除第一行
sed '$d' a.txt #刪除最后一行
sed '1,2d' a.txt #刪除第一行到第二行
sed '2,$d' a.txt #刪除第二行到最后一行
```
顯示某行
```
sed -n '1p' a.txt #顯示第一行
sed -n '$p' a.txt #顯示最后一行
sed -n '1,2p' a.txt #顯示第一行到第二行
sed -n '2,$p' a.txt #顯示第二行到最后一行
```
使用模式進行查詢
```
sed -n '/ruby/p' a.txt #查詢包括關鍵字ruby所在所有行
sed -n '/\$/p' a.txt #查詢包括關鍵字$所在所有行,使用反斜線\屏蔽特殊含義
```
增加一行或多行字符串
```
sed '1a drink tea' a.txt #第一行后增加字符串"drink tea"
sed '1,3a drink tea' a.txt #第一行到第三行后增加字符串"drink tea"
sed '1a drink tea\nor coffee' a.txt #第一行后增加多行,使用換行符\n
```
代替一行或多行
```
sed '1c Hi' a.txt #第一行代替為Hi
sed '1,2c Hi' a.txt #第一行到第二行代替為
```
替換一行中的某部分
> 格式:sed 's/old/new/g' (要替換的字符串可以用正則表達式)
```
sed 's/ruby/bird/g' a.txt #直接替換
sed -n '/ruby/p' a.txt | sed 's/ruby/bird/g' #先查找再替換ruby為bird
sed -n '/ruby/p' a.txt | sed 's/ruby//g' #先查找再刪除ruby
```
插入
```
sed -i '$a bye' a.txt #在文件a.txt中最后一行(用$指示)直接輸入"bye"
```
刪除匹配行
```
sed -i '/匹配字符串/d' filename (注:若匹配字符串是變量,則需要“”,而不是‘’。記得好像是)
```
替換匹配行中的某個字符串
```
sed -i '/匹配字符串/s/替換源字符串/替換目標字符串/g' filename
```
編輯-e 一行可以有多個-e將命令串聯起來
`sed -e '1,5d' -e 's/test/check/' a.txt`
先刪除1-5行,然后替換test為check
r 讀
cc.txt里的內容被讀進來,顯示在與222匹配的行后面,如果匹配多行,則cc.txt的內容將顯示在所有匹配行的下面:
`sed -i '/22/r cc.txt' a.txt`
a.txt內容為
1
22
333abcd
4444abcd
cc.txt內容
aaa
bbbbbbbbbbbbbbbbb
執行后`sed -i '/22/r cc.txt' a.txt`后,a.txt變為
1
22
aaa
bbbbbbbbbbbbbbbbb
333abcd
4444abcd
w 寫
在a.txt文件中所有包含abcd的行都被寫入cc.txt里:
`sed -n '/abcd/w cc.txt' a.txt`
- 前言
- Interview
- 01-cookie與session
- 04-mysql索引
- 05-memcache與redis
- 06-高并發
- 07-主從同步
- 08-myisam與inondb
- 09-框架區別
- 10-php7新特性
- 11-設計模式
- 12-MySQL優化
- 13-php自動加載機制
- 14-MongoDB命令
- 15-Python爬蟲之scrapy框架
- 16-php運行原理
- 17-單點登錄
- Linux
- linux常見命令
- awk
- sed
- bash-shell
- vim學習教程
- PHP
- php運行機制
- php執行效率
- word2pdf
- php預覽Word
- wechat_wafter2
- Python
- python
- win-bat
- svn操作命令
- git常用操作命令
- git_install
- gitlab安裝
- nextcloud
- docker