簡體   English   中英

在linux中使用sed命令在模式之前和之后刪除行

[英]inplace deletion of a line before and after a pattern using sed command in linux

forward-zone:
name: "."
forward-addr: 10.1.1.2

forward-zone:
name: "mydomain.com"
forward-addr: 10.1.1.1

我想在模式'name:“之前刪除一行。”'和模式之后的一行(包括模式本身)。 我嘗試了以下命令,但這不是修改文件本身。 我想做現場修改。 請幫忙

sed -n '/name: "."/{N;s/.*//;x;d;};x;p;${x;p;}' file

這樣的事情可能適合。

sed -rne '/^name: "\."/{n;n;h;d};1{h;d};x;p;${g;p}' -i file

-i選項允許Sed修改文件。 Sed命令hgx使用Sed的保持空間來保持前一行,直到檢查了當前行。 地址1$分別處理文件的第一行和最后一行,這可能需要特殊處理。

雖然這是一項教育活動,但不可否認,Awk甚至是Perl可能是比Sed更好的工具。 然而,正如你所看到的,通過一些額外的努力,Sed可以完成這項工作。

GNU awk方式:

$ awk '$2!~/name:\s*\"."/' RS= FS="\n" file
forward-zone:
name: "mydomain.com"
forward-addr: 10.1.1.1

從GNU awk 4.1.0開始,您可以添加開關-i inplace來更改文件。
那就是:

awk -i inplace '$2!~/name:\s*\"."/' RS= FS="\n" file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM