おそらく 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