刪除匹配pattern的前幾行 - Linux
By Thomas
at 2020-12-05T00:01
at 2020-12-05T00:01
Table of Contents
想請問如果想要刪除檔案中 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",不曉得還有沒有更好的作法~
--
Tags:
Linux
All Comments
By Elvira
at 2020-12-09T18:31
at 2020-12-09T18:31
By Daniel
at 2020-12-14T00:17
at 2020-12-14T00:17
By Ida
at 2020-12-18T02:11
at 2020-12-18T02:11
By Valerie
at 2020-12-22T12:31
at 2020-12-22T12:31
By Charlie
at 2020-12-23T05:51
at 2020-12-23T05:51
By Emma
at 2020-12-24T18:31
at 2020-12-24T18:31
By Kama
at 2020-12-28T03:33
at 2020-12-28T03:33
By Dora
at 2020-12-31T23:04
at 2020-12-31T23:04
By Jacob
at 2021-01-05T11:17
at 2021-01-05T11:17
By Zanna
at 2021-01-08T02:35
at 2021-01-08T02:35
Related Posts
設定快捷鍵的方法
By Necoo
at 2020-12-02T22:00
at 2020-12-02T22:00
設定快捷鍵的方法
By Liam
at 2020-12-02T12:38
at 2020-12-02T12:38
Zephyrus g14 Ubuntu無法安裝Nvidia驅動
By Susan
at 2020-12-01T19:04
at 2020-12-01T19:04
看不太懂這行sed的語法(取代unix2dos功
By Annie
at 2020-12-01T10:47
at 2020-12-01T10:47
看不太懂這行sed的語法(取代unix2dos功
By Victoria
at 2020-11-30T18:54
at 2020-11-30T18:54