sed 編輯命令
sed 編輯命令對照表


把 /etc/passwd 文件賦值到當前路徑下,進行操作
cp /etc/passwd ./ cat -n passwd

sed 刪除操作
刪除 passwd 文件的第一行
sed -i '1d' passwd

刪除 1-3 行
sed -i '1,3d' passwd

刪除不能登錄的用戶,即 /sbin/nologin
sed -i '/\/sbin\/nologin/d' passwd

刪除以mail開頭一直到以 ftp開頭的行
sed -i '/^mail/,/^ftp/d' passwd
sed 增加操作
在/bin/bash 行后面追加一句話 This is user which can login to system
sed -i '/\/bin\/bash/a This is user which can login to system' passwd
行前追加 在 root 和 nginx之間所有行之前追加 AAAAAAAAAAAAAAAAAAAA
sed -i '/^root/,/^nginx/i AAAAAAAAAAAAAAAAAAAA' passwd
查找passwd文件中所有root的行,讀取 list 的內容追加到其后面
cat list

sed -i '/root/r list' passwd

在passwd文件中將匹配到的 /bin/bash 行寫入到 /tmp/user_login.txt 文件中
sed '/\/bin\/bash/w /tmp/user_login.txt' passwd
sed 修改操作
修改:
- s/pattern/string/ 查找並替換,查找符合pattern模式的字符串,將其替換為string 適配(一、二、三、四、五)
- s/pattern/string/g g表示表示全部匹配
- s/pattern/string/2g 2g表示:同一行內,只替換前兩個匹配到的,剩下的不替換
- s/pattern/string/ig 加i參數表示匹配時忽略大小寫,g表示匹配到的全部替換
把 /bin/bash 全部替換為/BIN/BASH
sed -i 's/\/bin\/bash/\/BIN\/BASH/g' passwd
只替換第一個root為ROOT
sed -i 's/root/ROOT/' passwd

只替換 一行的第二個
cat str.txt

sed -i 's/HADOOP/hadoop/2' str.txt

反向引用
把匹配到的內容原封不動的保留下來
cat file.txt

sed -i 's/Had..p/&s/g' file.txt

\1 也可以表示前面匹配到的內容 (比 & 更加靈活)
sed -i 's/\(had..ps\)/\1R/g' str.txt

定義變量的時候如果使用單引號 ' 不會引用變量,注意需要使用雙引號"$var"
sed 命令用法總結
查詢:
- p 打印
刪除:
- d 刪
增加:
- a 匹配到的行后追加內容
- i 匹配到的行前追加內容
- r 將后面指定文件的內容追加到匹配到的行后面
- w 將匹配到的行內容另存到其他文件中
修改:
- s/pattern/string/ 查找並替換,查找符合pattern模式的字符串,將其替換為string 適配(一、二、三、四、五)
- s/pattern/string/g g表示表示全部匹配
- s/pattern/string/2g 2g表示:同一行內,只替換前兩個匹配到的,剩下的不替換
- s/pattern/string/ig 加i參數表示匹配時忽略大小寫,g表示匹配到的全部替換
其他編輯命令:
- = 顯示行號
什么是反向引用
- &和\1 引用模式匹配到的整個串
在file中搜尋以1開頭,然后跟兩個任意字符,以e結尾的字符串
sed "s/1..e/&r/g" file
和上面實現一樣的功能,使用\1代表搜尋到的字符串
sed "s/\(1..e\)/\1r/g" file
上面兩種方式實現了一樣的功能,分別使用&和\1引用前面匹配到的整個字符串 兩者區別在於&只能表示匹配到的完整字符串,只能引用整個字符串:而\1可以使用()對匹配到的字符串進行二次操作
例如:如果我們僅想要替換匹配到的字符串的一部分,name必須使用\1這種方式,不能使用&
sed中引用變量時注意事項:
- 1、匹配模式中存在變量,則建議使用雙引號
- 2、sed中需要引入自定義變量時,如果外面使用單引號,則自定義變量也必須使用單引號
