ファイルの最後のn行を編集するためのコマンドはありますか?行数が異なる複数のファイルがあります。しかし、各ファイルの最後のn行を修正したいと思います。目標は、最後のn行のカンマをセミコロンに置き換えることです。しかし、最後のn行にのみ適用されます。
どの行も削除したくないので、各ファイルの最後のn行で各コンマをセミコロンに置き換えたいと思います。
sedコマンドを使用すると、最後の行をこのコマンドで置き換えることができます。ここで説明されているように: ファイルの最後のテキスト行を削除する方法は?
ただし、これにより、最後のn行ではなく最後の行のみを変更できます。
ベストアンサー1
最後のn行のカンマをセミコロンに置き換えるには、次のようにしますed
。
n=3
ed -s input <<< '$-'$((n-1))$',$s/,/;/g\nwq'
分離してください:
ed -s
= edを自動的に実行します(最後に書き込まれたバイトを報告しません)。'$-'
=ファイルの末尾から減算($
)...$((n-1))
= n-1行...- (
$' ... '
=シェルから保護するためにコマンドの残りの部分を引用します) ,$s/,/;/g
= ...ファイルの最後まで(,$
)まですべてのコンマを検索してセミコロンに置き換えます。\nwq
=前のコマンドを終了して保存して終了します。
最後のn行のカンマをセミコロンに置き換えるには、次のようにしますsed
。
n=3
sed -i "$(( $(wc -l < input) - n + 1)),\$s/,/;/g" input
分割:
-i
=ファイルを「所定の位置に」編集する$(( ... ))
=数学を見てください:$( wc -l < input)
= ファイルの行数を取得します。-n + 1
= n-1行後ろに移動,\$
=行n-1からファイルの終わりまで:s/,/;/g
=カンマをセミコロンに置き換えます。