簡體   English   中英

使用SED或AWK從文件中刪除行

[英]Delete lines from file with SED or AWK

我看過很多變化,對如何解決這三個問題非常困惑。

  1. 從文件中刪除除第一行以外的所有行
  2. 使用行號從文件中刪除行
  3. 從具有一系列行號的文件中刪除行

使用sed:

刪除第1行:

sed '1d' file-name

刪除第10行:

sed '10d' file-name

刪除第5行到第10行

sed '5,10d' file-name

以上所有sed命令都會在stdout上寫入輸出,如果你想要或者使用sed的-i標志來內聯編輯文件,你可以將其重定向到另一個文件。

用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

要保存一些字符, {print}只能用1替換

要覆蓋原始文件,您必須執行以下操作

awk '...' file > tmpfile && mv tmpfile file

如果你的系統有它,你可以使用bash。 背后的基本思想是在迭代文件時設置計數並遞增此計數。

1)從文件中刪除除第一行以外的所有行

read -r line < file; echo "$line" > temp && mv temp file

2)用行號從文件中刪除一行

declare -i count=0
while read -r line
do
  ((count++))
  case "$count" in
    10) continue;;
    * ) echo "$line";;
  esac
done < file > temp && mv temp file

3)從具有一系列行號的文件中刪除行,例如從10到20

declare -i count=0
while read -r line
do
  ((count++))
  if (( $c < 10 && $c > 20 ));then
    echo "$line";;
  fi
done < file > temp && mv temp file

暫無
暫無

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

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