質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.83%
sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Q&A

解決済

sedコマンドでファイルの先頭に、別ファイルを挿入する方法

Noji999
Noji999

総合スコア13

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

3回答

0グッド

0クリップ

10597閲覧

投稿2019/04/13 09:19

前提・実現したいこと

sedコマンドでファイルの先頭に、別ファイルの内容をそのまま挿入したいです。
※文字列を挿入するのではなく、ファイルを挿入したい。

例えば

〇別ファイル add.txt

file

1add1 2add2 3add3

〇オリジナルファイル org.txt

file

1hoge1 2hoge2

〇期待する結果

file

1add1 2add2 3add3 4hoge1 5hoge2 6

試したこと1

sh

1cat org.txt | sed '1r add.txt' 2 3hoge1 ※rコマンドでは1行目の後に挿入されてしまう。 4add1 5add2 6add3 7hoge2 8

試したこと2

sh

1cat org.txt | sed '0r add.txt' 2sed: -e expression #1, char 2: 無効な行アドレス0の使用方法です。

のエラーが表示されてしまう。

試したこと3 下記文字列指定では実現できることは分かっているがファイルを挿入したい。

sh

1cat org.txt | sed '1i add1\nadd2\nadd3' 2add1 3add2 4add3 5hoge1 6hoge2

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答3

2

ベストアンサー

一応出来ました。org.txtは2行以上あることが前提です。

sh

1sed -i -e '1{' -e 'r add.txt' -e h -e d -e '}' -e '2{' -e x -e p -e x -e '}' org.txt

もうちょっと良い方法がありそうな気もしますが。

#追記
「試したこと3」の文字列をファイルから取る。

sh

1sed -i "1i `sed 's/$/\\n/;$s/\\n//' add.txt|tr -d '\n'`" org.txt

sed -iじゃなくてedwqでファイル更新する。0rが使えるので。

sh

1bash -c "ed org.txt <<<$'0r add.txt\nwq'"

投稿2019/04/13 12:14

編集2019/04/14 17:41
otn

総合スコア81800

Noji999, fu7mu4👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Noji999

2019/04/15 10:56

sed -i "1i `sed 's/$/\\n/;$s/\\n//' add.txt|tr -d '\n'`" org.txt の回答で、やりたいことが実現できました。 解なしかも?と思っていたので、驚きです! こちらをベストアンサーとします。 ありがとうごさいました。
otn

2019/04/15 12:35

厳密には、内側のsedは、 sed 's/$/\\n/;$s/\\n$//' でした。まあ、回答の記述でも実害は無いと思いますが。

1

普通にcat add.txt org.txtでいいのでは? catというコマンド名はそういう意味ですね。

投稿2019/04/13 09:58

KojiDoi

総合スコア13521

scsi👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Noji999

2019/04/13 10:28

回答ありがとうございます。 sed で実行したい理由は、find とsed -i オプションを組み合わせて、 ディレクトリ以下の複数ファイルに対して、一括して別ファイルを挿入したいです。 下記のような感じです。 ※この例だと、1行目の後に挿入されてしまうのでうまくいかない。 find ./hogege -type f | xargs sed -i '1r add.txt'
otn

2019/04/13 12:02

↑これは質問にちゃんと書いておいた方が良い。

0

一行目にダミー行を追加してからファイルを追加しそのあとで削除するのはどうですか?

sh

1cat org.txt | sed -e '1i dummy' | sed '1r add.txt' | sed '1d'

コメント sed -i できないですね。

投稿2019/04/14 04:16

編集2019/04/14 04:23
fu7mu4

総合スコア1088

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.83%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。