#navi(../)
* 指定した行に行挿入したい(出現したキーワードの前後行に行挿入したい) [#x517ce1b]
複数行からなるテキストデータに対し、指定した行に指定した文字列を挿入する方法および~
指定したキーワードの前後に行挿入する方法を以下に記します。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#z0e6661e]
-[[指定した範囲の行を取得する方法>逆引きUNIXコマンド/指定した範囲の行を取得する方法]]
-[[指定した行に行挿入したい(出現したキーワードの前後行に行挿入したい)>逆引きUNIXコマンド/指定した行に行挿入したい]]
-[[指定した文字数毎に文字を挿入したい>逆引きUNIXコマンド/指定した文字数毎に文字を挿入したい]]
-[[sedで指定した行を削除する方法>逆引きUNIXコマンド/sedで指定した行を削除する方法]]
-[[キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド>逆引きUNIXコマンド/キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド]]
-[[sedを使ってスペースの文字列操作を行う>逆引きUNIXコマンド/sedを使ってスペースの文字列操作を行う]]
-[[sedを使って改行のみ、スペースのみの行を削除する>逆引きUNIXコマンド/sedを使って改行のみ、スペースのみの行を削除する]]
-[[sedでスラッシュを置換する方法>逆引きUNIXコマンド/sedでスラッシュを置換する方法]]
-[[指定した範囲の行を取得する方法>逆引きUNIXコマンド/指定した範囲の行を取得する方法]]

* sedによる行挿入 [#d1c2f4cb]
以下の構文で指定した行に行挿入することができます。

テスト用テキストデータとして以下の内容を使用しました。
#ref(data.txt)
 $ cat data.txt
 one
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten

** 指定した行に挿入 [#md1f8a61]
指定した行に文字列を挿入してみます。~
以下の例では5行目に挿入しています。
 $ cat data.txt | sed -e '5i sakura at just4fun.biz'
 one
 two
 three
 four
 sakura at just4fun.biz
 five
 six
 seven
 eight
 nine
 ten
 
 $ cat data.txt | sed -e '5i sakura at just4fun.biz' | cat -n
      1  one
      2  two
      3  three
      4  four
      5  sakura at just4fun.biz
      6  five
      7  six
      8  seven
      9  eight
     10  nine
     11  ten
5行目に挿入されているのが確認できます。

ちなみに以下の記述でも同様の処理になります。
 sed -e '5i sakura at just4fun.biz' data.txt

指定した行に挿入する場合の構文は以下のようになります。
 sed -e '数字i 文字列' ファイル名

** 指定した行の下に挿入 [#q6619260]
指定した行の次に挿入する場合の記述は以下のようになります。
 sed -e '数字a 文字列' ファイル名
上記の挿入同様に、5行目を指定して実行してみます。
 $ cat data.txt | sed -e '5a sakura at just4fun.biz' | cat -n
      1  one
      2  two
      3  three
      4  four
      5  five
      6  sakura at just4fun.biz
      7  six
      8  seven
      9  eight
     10  nine
     11  ten

** 指定したキーワードの前後に挿入する場合 [#p8fc91be]
上記では行番号指定でしたが、指定した文字列が出現した場合、その前後に挿入する例を以下に記します。

前に挿入する場合の構文
 sed -e '/キーワード'/i 挿入文字列' ファイル名
後ろに挿入する場合の構文
 sed -e '/キーワード'/a 挿入文字列' ファイル名

以下、実行例を記します。
 $ cat data.txt | sed -e '/two/i INSERT'
 one
 INSERT
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
twoの前に挿入されているのが確認できます。

以下の例では、tがキーワードなので、tが出現する行の前に挿入されているのが確認できます。
 $ cat data.txt | sed -e '/t/i INSERT'
 one
 INSERT
 two
 INSERT
 three
 four
 five
 six
 seven
 INSERT
 eight
 nine
 INSERT
 ten

以下の例は、キーワードが出現した行の後ろに挿入する例です。
 $ cat data.txt | sed -e '/^nine$/a INSERT'
 one
 two
 three
 four
 five
 six
 seven
 eight
 nine
 INSERT
 ten

以上、sedをつかって指定した行および指定したキーワード行に行を挿入する方法でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS