[問題] 刪除匹配pattern的前幾行
想請問如果想要刪除檔案中 match 到的 pattern 的前幾行要用甚摸指令?
例如:
Aaaa
Bbbb
Snnn
我知道在 vim 中的話可以用 :g/Snnn/-2,-1d
但如果用 command line 的話就不大知道怎摸達到這樣的效果
有試過 sed 但 sed 似乎只能刪除 match 到的 pattern 的後幾行
想請教各位大大有沒有比較好的方法可以達成這個目的?
感謝
===== 更新 =====
感謝推文的大大們提示
目前嘗試過後有發現一個可行的方式了,就是先反轉檔案內容再刪除 matched line 的後幾行 然後再反轉檔案,不知道還有沒有更精簡的作法~
# 反轉檔案
sed '1!G;h;$!d' file or tac file
# 刪除 match 到的 pattern 的後 2 行 (包含 matched line)
sed '/Snnn/,+2d' file
# 刪除 match 到的 pattern 的後 2 行 (不包含 matched line)
sed '/Snnn/{n;N;d}' file
# 反轉檔案 -> 刪除 matched line 後 2 行 -> 反轉檔案
sed '1!G;h;$!d' file | sed '/Snnn/,+2d' | sed '1!G;h;$!d' > file (包含 matched line)
sed '1!G;h;$!d' file | sed '/Snnn/{n;N;d}' | sed '1!G;h;$!d' > file (不包含 matched line)
但在"不包含 matched line" 的作法中似乎無法直接指定要讀入後幾行,要刪除幾行就必須要幾個 "N",不曉得還有沒有更好的作法~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.3.109 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1607097719.A.18E.html
→
12/05 12:40,
4年前
, 1F
12/05 12:40, 1F
推
12/05 13:04,
4年前
, 2F
12/05 13:04, 2F
推
12/05 15:57,
4年前
, 3F
12/05 15:57, 3F
※ 編輯: lemonsheep (180.177.3.109 臺灣), 12/05/2020 20:16:11
推
12/06 23:08,
4年前
, 4F
12/06 23:08, 4F
推
12/06 23:12,
4年前
, 5F
12/06 23:12, 5F
→
12/06 23:13,
4年前
, 6F
12/06 23:13, 6F
→
12/06 23:13,
4年前
, 7F
12/06 23:13, 7F
→
12/06 23:14,
4年前
, 8F
12/06 23:14, 8F
推
12/06 23:16,
4年前
, 9F
12/06 23:16, 9F
哇 這招很厲害,比 sed 方便多了, 感謝大大。
這樣應該是一次一行指令被 pipe 傳到 ex
※ 編輯: lemonsheep (180.177.3.109 臺灣), 12/07/2020 22:14:46
推
12/16 18:01,
4年前
, 10F
12/16 18:01, 10F
→
12/16 18:02,
4年前
, 11F
12/16 18:02, 11F
→
12/16 18:02,
4年前
, 12F
12/16 18:02, 12F
→
12/16 18:02,
4年前
, 13F
12/16 18:02, 13F
Linux 近期熱門文章
23
129
PTT數位生活區 即時熱門文章