使用SED或AWK从文件中删除行

blu*_*ckk 15 regex unix shell awk sed

我看过很多变化,对如何解决这三个问题非常困惑.

  1. 从文件中删除除第一行以外的所有行
  2. 使用行号从文件中删除行
  3. 从具有一系列行号的文件中删除行

anu*_*ava 28

使用sed:

删除第1行:

sed '1d' file-name
Run Code Online (Sandbox Code Playgroud)

删除第10行:

sed '10d' file-name
Run Code Online (Sandbox Code Playgroud)

删除第5行到第10行

sed '5,10d' file-name
Run Code Online (Sandbox Code Playgroud)

所有上述sed命令都会在stdout上写入输出,如果你想要或者使用-ised标志来内联编辑文件,你可以将其重定向到另一个文件.


gle*_*man 8

用awk:

# delete line 1
awk 'NR == 1 {next} {print}' file

# delete line number stored in shell variable $n
awk -v n=$n 'NR == n {next} {print}' file

# delete between lines $a and $b inclusive
awk -v m=$a -v n=$b 'm <= NR && NR <= n {next} {print}' file
Run Code Online (Sandbox Code Playgroud)

为了节省几个字符,{print}可以替换为1

要覆盖原始文件,您必须执行以下操作

awk '...' file > tmpfile && mv tmpfile file
Run Code Online (Sandbox Code Playgroud)

  • 要删除第1行,请使用awk'NR!= 1'.默认操作是打印该行.您的所有"{next} {print}"条款都可以删除. (2认同)