14

でやってみましたが、cat追加した2番目のファイルを入力した後、最初| head -$line | tail -1に実行されるため機能しませんcat

何か案は?私はそれをcat何か他のもので行う必要があります。

4

5 に答える 5

21

私はおそらく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
于 2012-12-26T17:51:37.430 に答える
8

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

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

行番号が変数に格納されている場合、次のようになりますline

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

Zackを喜ばせるために、bashが気に入らない場合に備えて、bashismが少ないバージョンを1つ紹介します(個人的には、パイプやサブシェルは好きではありません。herestringsが好きですが、私が言ったように、それはZackを喜ばせるためだけです):

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

または(Sorpigalを喜ばせるために):

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

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

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

お役に立てれば!

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

于 2012-12-26T18:19:05.227 に答える
3
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
于 2012-12-26T17:39:54.747 に答える