GNU/Linux >> Linux の 問題 >  >> Linux

ファイルの内容を別のファイルに挿入する (送信されたファイルの特定の行に) - BASH/LINUX

おそらく sed を使用します このジョブの場合:

line=3
sed -e "${line}r file2" file1

file1 を上書きする場合 そしてあなたはGNU sedを持っています 、 -i を追加します オプション。それ以外の場合は、一時ファイルに書き込み、一時ファイルを元のファイルにコピー/移動し、必要に応じてクリーンアップします (それが trap 以下のもの)。注:一時ファイルをファイルにコピーすると、リンクが保持されます。移動はしません (ただし、ファイルが大きい場合は特に高速です)。

line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0

楽しみのため、そして私たちが ed を愛しているという理由だけで 、標準のエディター、これは ed です バージョン。とても効率的です (ed 本物です テキストエディタ)!

ed -s file2 <<< $'3r file1\nw'

行番号が変数 line に格納されている場合 次に:

ed -s file2 <<< "${line}r file1"$'\nw'

Zack を喜ばせるために、bash が気に入らない場合に備えて、バシズムの少ないバージョンを 1 つ示します (個人的には、パイプとサブシェルは好きではなく、ヒアストリングスを好みますが、言ったように、それは Zack を喜ばせるためだけです):

printf "%s\n" "${line}r file1" w | ed -s file2

または (ソルピガルを喜ばせるために):

printf "%dr %s\nw" "$line" file1 | ed -s file2

Jonathan Leffler がコメントで言及しているように、スクリプトでこのメソッドを使用する場合は、ヒアドキュメントを使用してください (通常はこれが最も効率的です)。

ed -s file2 <<EOF
${line}r file1
w
EOF

これがお役に立てば幸いです!

追記ed を運転する方法について自分自身を表現する必要があると感じた場合は、遠慮なくコメントを残してください。 、標準エディター。


cat file1 >>file2

file1 のコンテンツを file2 に追加します。

cat file1 file2

file1 と file2 を連結し、出力を端末に送信します。

cat file1 file2 >file3

file1 と file2 を連結して file3 を作成または上書きします

cat file1 file2 >>file3

file1 と file2 の連結を file3 の末尾に追加します。

編集 :

file1 を追加する前に file2 をトランキングする場合:

sed -e '11,$d' -i file2 && cat file1 >>file2

または 500 行のファイルを作成する場合:

n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2

Linux
  1. LinuxコマンドラインからのGoogleドライブの使用

  2. 別のファイルにない1つのファイルの行を取得するためのツール?

  3. ファイルの最初の行の前にテキストを挿入する方法は?

  1. Linuxコマンドラインでファイルの特定の行を表示する方法

  2. Linux でコマンドラインを使用して任意のファイルをダウンロードするための 4 つのツール

  3. Linux - ファイルの末尾に空行があるかどうかを確認する

  1. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  2. Linuxでのテキストファイルの少ないビューアの高度な使用

  3. Linux - 特定の行からファイルの最後までの grep