私は多くのバリエーションを見てきましたが、これら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があれば、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