我见过许多变化,对如何解决这3个问题非常困惑。
答案 0 :(得分:27)
使用sed:
删除第1行:
sed '1d' file-name
删除第10行:
sed '10d' file-name
删除第5行到第10行
sed '5,10d' file-name
以上所有sed命令都会在stdout上写入输出,如果你想要或者使用sed的-i
标志来内联编辑文件,你可以将其重定向到另一个文件。
答案 1 :(得分:7)
使用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
答案 2 :(得分:0)
如果您的系统有bash,您可以使用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