刪除匹配pattern的前幾行 - Linux

Thomas avatar
By Thomas
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

Elvira avatar
By Elvira
at 2020-12-09T18:31
關鍵字: hold space,歡迎進入sed的燒腦領域
Daniel avatar
By Daniel
at 2020-12-14T00:17
grep -A
Ida avatar
By Ida
at 2020-12-18T02:11
awk if匹配後狂print
Valerie avatar
By Valerie
at 2020-12-22T12:31
用 vim 的 scripting 模式吧,或用 ed
Charlie avatar
By Charlie
at 2020-12-23T05:51
ex -c ':g/Snnn/-2,-1d' -c ':wq' file.txt
Emma avatar
By Emma
at 2020-12-24T18:31
喔可以加個 -s 選項
因為你要做的事本質需要在檔案中來回移動,所以用 sed
Kama avatar
By Kama
at 2020-12-28T03:33
會很不方便,sed 是用來處理串流的,只能前進不能回頭
Dora avatar
By Dora
at 2020-12-31T23:04
or printf '%s\n' :g/Snnn/-2,-1d :wq | ex -s file.t
Jacob avatar
By Jacob
at 2021-01-05T11:17
sed ':rn; N; s/\n/\n/3; t c; b rn; :c s/\n/\t/g'
Zanna avatar
By Zanna
at 2021-01-08T02:35
sed 的 s///3 可以取代第 n 個,取代 \n 就能判斷是否
存在 3 個 \n 。
但實際上不會比較好寫

設定快捷鍵的方法

Necoo avatar
By Necoo
at 2020-12-02T22:00
發個牢騷,主要是對gnome 個人目前是Archlinux,gnome 3.38 Archlinux不裝DE的話是透過loadkeys決定要去用哪個鍵位配置的 而在/etc/vconsole.conf裡給定鍵位檔的話 鍵位更改在開機時就會完成(*) 因此要自訂鍵位很簡單,gunzip出來改鍵值、gz ...

設定快捷鍵的方法

Liam avatar
By Liam
at 2020-12-02T12:38
各位前輩好 小弟原先使用的是Ubuntu系統, 在Ubuntu中可以透過Gnome提供的設定界面來調整、自定義快捷鍵, 對於初學者來說相當友善,根據自己的習慣調整好之後使用起來很順利。 但換到像是Bodhi linux這類的輕量級作業系統, 調整快捷鍵的GUI界面就不太一樣,很不習慣。 所以我想請教有關終端 ...

Zephyrus g14 Ubuntu無法安裝Nvidia驅動

Susan avatar
By Susan
at 2020-12-01T19:04
最近新買西風g14,安裝完 Ubuntu 18.04後發現問題可多了,螢幕不能調亮度、聲音只有 最大聲跟靜音、鍵盤背光無法調整,還有不管用什麼方法我只要安裝完 Nvidia 驅動後re boot後一定黑屏,有人有相同的問題嗎?或高手解答,感謝。 - ...

看不太懂這行sed的語法(取代unix2dos功

Annie avatar
By Annie
at 2020-12-01T10:47
※ 引述《alloc (大碗滷肉飯男孩)》之銘言: : 各位前輩好, : 因為我想將unix文件轉成dos模式(加入carrige return),但不能用unix2dos指令。 : 在網路上找到以下的sed方式: : sed and#39;s/$and#39;and#34;/`echo \\\r`/and# ...

看不太懂這行sed的語法(取代unix2dos功

Victoria avatar
By Victoria
at 2020-11-30T18:54
各位前輩好, 因為我想將unix文件轉成dos模式(加入carrige return),但不能用unix2dos指令。 在網路上找到以下的sed方式: sed and#39;s/$and#39;and#34;/`echo \\\r`/and#34; file andgt; output 可以用,但我實在 ...