Work Life Fun

100人分の書類を一括修正|社労士のためのsed入門(行の挿入・削除)

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

法改正があり、顧問先の従業員100人分の書類に、同じ1行を追記しなければならない。

例えば、2024年4月から、労働条件通知書で「就業場所・業務の変更の範囲」の明示が必要になりました。こうした変更を100人分、1つずつファイルを開いて手作業で直すと、半日はかかります。途中で1人分を飛ばしてしまう、といったミスも起こりがちです。

こんなときに役立つのが、テキストファイルを一括で編集できる「sed(セド)」というコマンドです。100人分のファイルでも、処理は1秒もかからずに終わります。

この記事では、ITが専門ではない社労士でも使えるよう、sedによる行の挿入・削除の基本と、失敗しないための注意点を紹介します。

なお、最後に、コマンドを覚えなくても使える方法として、AIにコマンドを書いてもらうコツもお伝えします。

前提:Markdownなどのテキストファイルだからできる

最初に大事な前提をお伝えします。

sedが使えるのは、Markdownなどのテキストファイルだけです。Wordファイルの中身をsedで直接編集することはできません。

私は、就業規則や関連規程、労働条件通知書など、業務で使う書類の大半をMarkdownで作成し、顧問先が希望する場合にはWordに変換しています。テキストファイルで書類を作っておくと、このように一括で編集できるのも大きなメリットです。

関連:MarkdownからWordに一発変換|Pandocの使い方を社労士がやさしく解説

Markdownで書類を作るためのソフト「VSCode」については、以下の記事で紹介しています。

関連:社労士のためのVSCode入門|就業規則をWordではなくMarkdownで書く理由

なお、sedはMacやLinuxには最初から入っていますが、Windowsには入っていません。この記事はMacのターミナルを例に解説しますが、Windowsでも無料のツールを1つ入れるだけで同じように使えます。Windowsでの使い方は、後ほど「Windowsの場合」で紹介します。

sedの基本:行を削除する

まずは、行を削除する方法です。例として、以下のような労働条件通知書のファイル「sample.md」を使います。

# 労働条件通知書
- 契約期間:期間の定めなし
- 就業の場所:本社
- 従事すべき業務の内容:営業
- 始業・終業の時刻:9時00分〜18時00分

1行だけ削除する

2行目を削除したい場合は、以下のコマンドを入力します。「2d」は「2行目を削除(delete)する」という意味です。

$ sed -e "2d" sample.md

結果は以下のとおり、2行目の「契約期間」の行がなくなります。

# 労働条件通知書
- 就業の場所:本社
- 従事すべき業務の内容:営業
- 始業・終業の時刻:9時00分〜18時00分

複数行をまとめて削除する

2行目から4行目までをまとめて削除したい場合は、「2,4d」とします。

$ sed -e "2,4d" sample.md
# 労働条件通知書
- 始業・終業の時刻:9時00分〜18時00分

なお、この段階では画面に結果が表示されるだけで、元のファイルは変更されません。ファイルとして保存する方法は、後ほど紹介します。

sedの基本:行を挿入する

次に、行を挿入する方法です。

  • 「i」(insert):指定した行の前に挿入する
  • 「a」(append):指定した行の後に挿入する

例えば、3行目の「就業の場所」の直後に、変更の範囲を追記したい場合は「3a」を使います。

$ gsed -e "3a - 就業場所の変更の範囲:会社の定める場所" sample.md
# 労働条件通知書
- 契約期間:期間の定めなし
- 就業の場所:本社
- 就業場所の変更の範囲:会社の定める場所
- 従事すべき業務の内容:営業
- 始業・終業の時刻:9時00分〜18時00分

同じ場所に挿入するなら、「4i」(4行目の前に挿入)と書いても結果は同じです。どちらを使うかは、前後の文章との関係で決めれば大丈夫です。

就業場所と業務の両方に追記したい場合は、-e を2つ並べます。行番号は、挿入する前の元のファイルの行番号で指定します。

$ gsed -e "3a - 就業場所の変更の範囲:会社の定める場所" -e "4a - 業務の変更の範囲:会社の定める業務" sample.md

ここで、コマンドが「sed」ではなく「gsed」になっていることにお気づきでしょうか?

Macでエラー「command i expects \ followed by text」が出た場合

Macのターミナルで、行を挿入するコマンドを「sed」のまま入力すると、以下のエラーが出ます。

$ sed -e "3a 追記する文" sample.md
sed: 1: "3a 追記する文
": command a expects \ followed by text

「i」で挿入しようとした場合も、同じく「command i expects \ followed by text」と表示されます。

これは、Macに最初から入っているsedと、Linuxなどで使われているsed(GNU版)で、細かい書き方が違うためです。行の削除はどちらでも同じように動きますが、挿入は書き方が異なります。私もこの違いに見事にハマったことがあります。

解決法は、MacにGNU版のsedである「gsed」をインストールし、「sed」の代わりに「gsed」を使うことです。Homebrewを使っている場合は、以下のコマンドでインストールできます。

$ brew install gnu-sed

インストールした後は、本記事のとおり「gsed」と入力すれば、エラーは出なくなります。

Windowsの場合:Git Bashを使う

Windowsには、最初からsedが入っていません。ただ、無料の「Git for Windows」をインストールすれば、Windowsでも同じように使えます。

Git for Windowsには、「Git Bash」というターミナル(コマンドを入力する画面)が付いてきます。このGit Bashに入っているsedは、GNU版です。

そのため、Windowsでは「gsed」をインストールする必要はなく、本記事の「gsed」を「sed」に読み替えるだけで、そのまま動きます。

$ sed -e "3a - 就業場所の変更の範囲:会社の定める場所" sample.md

手順は以下のとおりです。

  1. 公式サイトからGit for Windowsをダウンロードし、インストールする(設定は初期値のままで大丈夫です)
  2. 書類のファイルが入っているフォルダを、エクスプローラーで開く
  3. フォルダ内の何もないところで右クリックし、「Open Git Bash here」を選ぶ(Windows 11では「その他のオプションを確認」の中にあります)
  4. 開いた画面に、本記事のコマンドを入力する

手順3のようにフォルダから開けば、そのフォルダの中にあるファイルを対象にコマンドを実行できます。

なお、ファイルの文字コードは「UTF-8」にしておいてください。VSCodeで作成したMarkdownファイルであれば、最初からUTF-8になっています。

100人分のファイルを一括で処理する

ここからが本番です。

1つのファイルだけなら、手作業でコピペした方が早いでしょう。「わざわざコマンドを覚える必要はないのでは?」と思うかもしれません。

しかし、人事労務の実務では、書式は同じで氏名などだけが違う書類を、従業員の人数分、数十枚、数百枚と扱うことがよくあります。私も実務で、100人分の従業員ファイルに同じ処理をしたことがあります。

例えば、フォルダの中にある全員分の労働条件通知書(member1.md〜member100.md)に、まとめて追記する場合は、以下のように書きます。

mkdir -p new
for f in member*.md; do
  gsed -e "3a - 就業場所の変更の範囲:会社の定める場所" "$f" > "new/$f"
done

1行ずつ意味を説明すると、以下のとおりです。

  1. mkdir -p new:修正後のファイルを保存する「new」フォルダを作る
  2. for f in member*.md; do:「member」で始まるMarkdownファイルを、1つずつ順番に処理する
  3. gsed -e "3a ..." "$f" > "new/$f":3行目の後に追記し、同じファイル名で「new」フォルダに保存する
  4. done:繰り返し処理の終わり

たった4行ですが、100人分のファイルでも、処理は1秒もかかりません。

失敗しないための3つの注意点

一括処理は便利な反面、間違えると100人分の書類がまとめて間違った内容になります。そのため、私は必ず以下の3点を守っています。

1. 元のファイルを上書きしない

前述の例では、修正後のファイルを「new」フォルダに別に保存しています。元のファイルを残しておけば、間違えても何度でもやり直せます。

2. 行番号の指定は、書式が揃っていることが前提

行番号で場所を指定する方法は、すべてのファイルの書式(行の並び)が同じであることが前提です。

1人だけ特記事項が1行多い、といったファイルが混ざっていると、その人の書類だけ違う場所に追記されてしまいます。

書式が揃っているか自信がない場合は、行番号ではなく文字列で場所を指定する方法もあります。以下は「- 就業の場所」で始まる行の後に追記する書き方です。

$ gsed -e "/^- 就業の場所/a - 就業場所の変更の範囲:会社の定める場所" sample.md

「^」は「行の先頭」という意味です。こうした書き方は「正規表現」と呼ばれ、以下の記事でも紹介しています。

関連:社労士のための正規表現入門|VSCodeで就業規則の条ずれ・表記揺れを一括チェック

3. まず1ファイルで試し、結果を確認する

いきなり全員分を処理せず、まず1ファイルで試し、修正前と修正後を見比べます。違いは、以下の「diff」コマンドで確認できます。

$ diff member1.md new/member1.md

追記した1行だけが表示されれば、意図したとおりに処理できています。

コマンドは覚えなくていい:AIに書いてもらう

ここまで読んで、「やはりコマンドは難しい・・・」と感じた方もいると思います。

安心してください。今は、コマンドを自分で覚える必要はありません。ClaudeやChatGPTなどの生成AIに、やりたいことを日本語で伝えれば、コマンドを書いてくれます。

例えば、以下のように頼みます。

Macのターミナルで、フォルダ内の「member」で始まる100個のMarkdownファイルについて、「- 就業の場所」で始まる行の直後に「- 就業場所の変更の範囲:会社の定める場所」という1行を挿入したいです。元のファイルは残して、修正後のファイルは「new」フォルダに保存するコマンドを教えてください。

ポイントは、以下の3つを具体的に伝えることです。

  • 使っている環境(Macのターミナルなど)
  • どのファイルの、どこに、何をしたいか
  • 元のファイルを残したいこと

大事なのは、コマンドを暗記することではなく、「こういうことができる」と知っていることです。そして、AIが書いたコマンドも、前述の注意点のとおり、必ず1ファイルで試してから全件に使ってください。

まとめ

sedを使えば、テキストファイルで作った書類を、何十人分、何百人分でも一括で修正できます。

  • 行の削除は「d」、挿入は「i」(前)と「a」(後)
  • Macで挿入するときは「sed」ではなく「gsed」を使う
  • 元のファイルは上書きせず、まず1ファイルで試す
  • コマンドは覚えなくても、AIに書いてもらえばいい

手作業で半日かかっていた修正が1秒で終われば、その時間を、顧問先への対応など社労士という専門家にしかできない仕事に使えます。

メールマガジン「社労士のための『ほどほど』お悩み相談室」では、ITが専門ではない一人社労士でも取り入れられる業務効率化の工夫など、一人社労士事務所の実践を月1回お届けしています。以下のフォームから無料で登録できます。

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

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

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

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

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

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

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

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

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

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

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


    up_line