ファイルの最後のn行をどのように編集しますか?

ファイルの最後のn行をどのように編集しますか?

ファイルの最後の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=カンマをセミコロンに置き換えます。

おすすめ記事