Work Life Fun

特定の行に行数を明示して文字列を挿入する方法(sed)

※当サイトはリンクに広告ページが含まれている場合があります

みんな大好きbashの話、といっても、現在のmacOSのデフォルトは、bashからzshに変更されているので、以下はzshを用いる場合の解説になります。

2行目に文字列を挿入したい場合

まず、ファイル「test.txt」の中身は、以下の3行の文字列とします。

line1
line2
line3

この2行目に「hoge」という文字列を挿入したい場合、bashでは以下のコマンド一発です。

$ sed -e "2i hoge" test.txt

結果は以下のようになります。

line1
hoge
line2
line3

2行目直下に文字列を挿入したい場合

2行目直下に文字列を挿入したい場合は「i」ではなく「a」を用います。

$ sed -e "2a hoge" test.txt

結果は以下のようになります。

line1
line2
hoge
line3

上の結果を見ると、3行目に挿入した形になっています。そのため今回の例では以下のようにしてもOKです。どちらを利用するかは、前後の文章との関係によります。

$ sed -e "3i hoge" test.txt

参考:ある文字列をファイルの特定行に挿入するコマンド

実務で役立つファイル操作 sed

当然、1つのファイルであれば、コピペで十分です。わざわざ、こんなコマンドを覚える必要はないのでは・・・と思うでしょう。私も学生時代はそう思っていました。

しかし、人事労務だけでなく総務業務でも、定型書類・定型データを従業員分、数十枚、数百枚扱うことなんて日常茶飯事です。

そうすると、書式は同じ、でも従業員の氏名など、書類の箇所によっては違う書類・データがあったりします。

そんなときこそ、bashの出番です。100のファイルがあっても1秒もかからず終了します

以下は、実際に実務で利用したスクリプトです。といっても、ファイル名や挿入した文章をここで公開するわけにはいかないので、適宜変更しています。

#!/bin/sh

for i in {1..100};do
    cat member$i.md
    gsed -e "24i - hogehoge" member$i.md > new/member$i.md
done

このスクリプトで実行したのは以下の作業ですが、たった6行でできます。

  • member1からmember100のファイルをループ処理で読み込み
  • 24行目に「hogehoge」を挿入
  • 「new」フォルダに、新しいmember1からmember100のファイルを作成

ちなみに、ここでは「sed」でなく「gsed」となっています

Mac、Linuxはどちらもbashを使うことができますが、細かく言うと、MacはBSD系、LinuxはGNU系、そして「sed」で挙動の違いがあります。その違いに私は見事にハマりました。解決法は以下の記事で紹介しています。

関連:Macのsedでエラー「command i expects \ followed by text」が出た場合の解決法

今回は文字列を挿入する方法を紹介しましたが、削除する方法も当然あります。以下の記事をご参考ください。

関連:行数を明示してその行の文字列を削除する方法(sed)

社労士のための「ほどほど」お悩み相談室

あなたのご質問・ご相談に、月1回、無料・本音で回答します。

ご質問・ご相談は、登録後に届くメールから送っていただけます。費用は一切かかりません。「お悩み相談室」というクローズドな場だからこそ、踏み込んだ内容の質問にも回答できます。

これまでに、こんなご質問・ご相談に回答してきました。

  • コンサル(3号業務)を主力業務にするには、どうすれば良いか?
  • どのようにして顧問料を上げれば良いか?
  • 営業が苦手で、新規の顧客獲得ができない
  • 業務をどう絞り込めば良いか?
  • 一人社労士のままで良いのか、人を雇うべきか?
  • 苦手・相性の悪い顧問先と、どう付き合うか?
  • 生成AIの時代、社労士は今後どう生き残るか?

なぜ、無料で同業の社労士からの相談に乗るのか?

それは「本当に顧客のために活動できる社労士仲間を増やしたい」からです。

私自身、社労士という資格に誇りを持っています。企業からの社労士に対する不満をよく聞きますし、「社労士なんて役に立たない」と思われることは、正直悔しいです。

  • 信頼される・信頼できる社労士の仲間を増やしていきたい

そんな想いから、少しでも社労士業界全体のレベルアップに貢献できればと考えています。

    登録は無料・月1回配信・配信解除いつでも可能
    ※ 登録後、本人確認のメールをお送りします。届かない場合は迷惑メールフォルダもご確認ください。


    up_line