[英]How to insert a line using sed before a pattern and after a line number?
[英]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命令h
, g
和x
使用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.