テキストをリダイレクトしてから、指定された行番号に書き込むには?

テキストをリダイレクトしてから、指定された行番号に書き込むには?

ファイルの後半ではなく、「指定されたパラメータ内」行にテキスト文字列をリダイレクトできますか?またはコマンド/および/または引数、サブシェルの組み合わせ(リダイレクトによって不可能な場合)。

答え1

GNUの使用awk:

text_string='some arbitrary
text'
line_number=12
file=/some/file

STRING="$text_string" gawk -i /usr/share/awk/inplace.awk -v n="$line_number" -e '
  NR == n {print ENVIRON["STRING"]}
  {print}' -E /dev/null "$file"

perl同じ

perl -spi -e '$_ = "$string\n$_" if $. == $n
  ' -- -string="$text_string" -n="$line_number" -- "$file"

ファイルをその場で編集します(効果的に編集されたコピーに置き換えます)。

gawkバリアントはというファイルでは機能しません。現在のディレクトリから呼び出されたファイルを-編集する代わりに。-./-

返品、使用しないでください-i inplace現在の作業ディレクトリから最初に拡張機能をgawkロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

関連情報