iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Software Development

系統與服務雜談系列 第 12

sed - 4 Write commands

前篇回顧
sed - 簡介 讀取編輯文字檔的好工具
sed - 2 Pattern
sed - 3 Delete command

今天聊sed的增加操作

  • a(append) 在匹配行後面新增一行
  • i(insert) 在匹配行前面新增一行
  • r(append from file) 讀取外部文件, 在匹配行後面新增
  • w(write the current pattern space to file) 從pattern space把匹配行訊息給寫到外部文件的尾巴

重要

首先拿/etc/passwd來玩, 但是我們玩備份的這檔案, 別玩etc底下的, 玩完系統就崩潰了

# 複製passwd 到當前目錄
cp /etc/passwd ./
  • 在匹配行前面新增一行
sed '/^root/i ItHome' passwd 
> ItHome
> root:x:0:0:root:/root:/bin/bash
> daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  • 在多個pattern1的行之間, 每行的前面都新增
sed '/^root/,/^sys/i ItHome' passwd 
> ItHome
> root:x:0:0:root:/root:/bin/bash
> ItHome
> daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
> ItHome
> bin:x:2:2:bin:/bin:/usr/sbin/nologin
> ItHome
> sys:x:3:3:sys:/dev:/usr/sbin/nologin
> sync:x:4:65534:sync:/bin:/bin/sync
  • 讀取外部文件, 在匹配行後面新增;
    在root開頭的匹配行後面, 讀取
    這裡的文件路徑可以是絕對路徑/相對路徑
sed '/^root/r os.txt' passwd 
> root:x:0:0:root:/root:/bin/bash
> Windows OS	os
> Linux Os os
> Android
> OS
> daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  • 把匹配行給寫到外部文件
    這裡的文件路徑可以是絕對路徑/相對路徑
    -n就只輸出列印匹配到的內容, 但這裡沒commandp, 等於不會輸出任何資訊, 畫面乾淨點
    想知道執行結果能搭配grep那邊提到的$?
sed -n '/^root/w passwd_demo' passwd
cat passwd_demo
> root:x:0:0:root:/root:/bin/bash
  • 在文件第一行新增
    有時會想再文件前面加點註解還是修改歷程
    借助之前提到的定位符, 針對第1行做insert的動作
sed '1i #comment 13th ItHome\n#Arthor:Nathan' passwd
> #comment 13th ItHome
> #Arthor:Nathan
> root:x:0:0:root:/root:/bin/bash
> daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  • 在文件末尾新增
sed '$a #comment 13th ItHome\n#Arthor:Nathan' passwd
> systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
> #comment 13th ItHome
> Arthor:Nathan

上一篇
sed - 3 Delete command
下一篇
sed - 5 Replace command
系列文
系統與服務雜談32

尚未有邦友留言

立即登入留言