【Linux】sedコマンドを使ってみる(ChatGPT)

ストリームエディター(sed)は、テキストファイルを簡単に操作することができるLinux用のコマンドラインツールです。特に、大きなテキストの編集や変換を行い、行単位で出力します。また、正規表現にも対応しています。このブログでは、sedの主な機能やコマンドの使用方法を学習していきます。
スポンサーリンク

前提(ChatGPT)

この記事では、ChatGPT(GPT-3.5)というAIツールを使います。AIツールを使うことで、自然言語でコマンドを作成することができます。実現したい機能をプロンプトとして入力し、適切なコマンドを出力させて実行することで、多くの実行例を学ぶことができます。今後は、コマンドの構文を覚えるよりも、プロンプトを使って学ぶスタイルに変化していくものと思われます。

ChatGPTの出力は、プロンプトを実行するたびに異なります。記事に書かれている通りに出力されるとは限りません。必ず出力結果を確認してからコマンドを実行してください。

スポンサーリンク

サンプルファイルの準備

まず、sedコマンドを学ぶためのサンプルファイルを作成するように、ChatGPTに指示します。

Ubuntuでsedコマンドを学習したいです。学習に使用するサンプルテキスト(3行、全体合計50~80字)を作成してください。

出力(ChatGPT)
以下のサンプルテキストを作成し、echo コマンドで sample.txt ファイルに出力することができます。
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。

echoコマンドを使って、カレントディレクトリ直下にsample.txtというファイルを作成します。

スポンサーリンク

テキスト置換

ファイル内の文字のすべての文字を置換する

sample.txtファイル内の文字のすべての「Ubuntu」を「Linux」に置換するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内のすべての「Ubuntu」を「Linux」に置換することができます。

sed -i ‘s/Ubuntu/Linux/g’ sample.txt

このコマンドでは、-iオプションを使用して、置換をファイルに直接反映させます。s/Ubuntu/Linux/gは、置換するパターンと置換文字列を指定する正規表現です。最後の「g」は、パターンにマッチするすべてのインスタンスを置換することを意味します。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i 's/Ubuntu/Linux/g' sample.txt
hirotano@hirotano:~$ cat sample.txt                      
LinuxはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$

複数の置換条件を一括で実行する

sample.txt内のすべての「Linux」を「Unix」に、すべての「Ubuntu」を「Fedora」に置換するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内のすべての「Linux」を「Unix」に、すべての「Ubuntu」を「Fedora」に置換することができます。

sed -i -e ‘s/Linux/Unix/g’ -e ‘s/Ubuntu/Fedora/g’ sample.txt

このコマンドでは、-iオプションを使用して、置換をファイルに直接反映させます。-eオプションを使用して、複数の置換コマンドを指定します。最初の置換コマンドで、LinuxをUnixに置換し、2番目の置換コマンドでUbuntuをFedoraに置換します。両方のコマンドには最後に「g」があり、パターンにマッチするすべてのインスタンスを置換することを意味します。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i -e 's/Linux/Unix/g' -e 's/Ubuntu/Fedora/g' sample.txt
hirotano@hirotano:~$ cat sample.txt 
FedoraUnixディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ここもm

アルファベット小文字をすべて大文字に変更(正規表現)

ファイルsample.txt内の小文字アルファベットをすべて大文字に置換するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内の小文字アルファベットをすべて大文字に置換することができます。

sed -i ‘s/[a-z]/\U&/g’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。s/[a-z]/\U&/gは、小文字アルファベットを大文字アルファベットに置換するための正規表現です。[a-z]は、小文字アルファベットの範囲を指定し、\U&は、マッチした文字列を大文字に変換するためのコマンドです。最後の「g」は、パターンにマッチするすべてのインスタンスを置換することを意味します。このコマンドにより、sample.txtファイル内のすべての小文字アルファベットが大文字アルファベットに置換されます。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i 's/[a-z]/\U&/g' sample.txt
hirotano@hirotano:~$ cat sample.txt                   
UBUNTULINUXディストリビューションのひとつです。
SEDコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$
スポンサーリンク

テキスト削除

指定した行番号を削除

sample.txtの2行目を削除するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイルの2行目を削除することができます。

sed -i ‘2d’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。2dは、2行目を削除するための削除コマンドです。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i '2d' sample.txt
hirotano@hirotano:~$ cat sample.txt        
UbuntuはLinuxディストリビューションのひとつです。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$

指定した文字を含む行を削除

ファイルsample.txt内の「sedコマンド」が含まれる行をすべて削除するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内の「sedコマンド」が含まれる行をすべて削除することができます。

sed -i ‘/sedコマンド/d’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。/sedコマンド/は、削除するパターンを指定する正規表現です。dは、パターンにマッチする行を削除するための削除コマンドです。このコマンドにより、sample.txtファイル内の「sedコマンド」が含まれるすべての行が削除されます。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i '/sedコマンド/d' sample.txt
hirotano@hirotano:~$ cat sample.txt                    
UbuntuはLinuxディストリビューションのひとつです。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$
スポンサーリンク

テキスト抽出

指定した文字列を含む行を抽出

ファイルsample.txt内の「Ubuntu」という文字列が含まれる行をすべて抽出するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内の「Ubuntu」という文字列が含まれる行をすべて抽出することができます。

sed -n ‘/Ubuntu/p’ sample.txt

このコマンドでは、-nオプションを使用して、出力を抑制します。/Ubuntu/は、抽出するパターンを指定する正規表現です。pは、パターンにマッチする行を印刷するための印刷コマンドです。このコマンドにより、sample.txtファイル内の「Ubuntu」という文字列が含まれるすべての行が抽出されます。

実行例

hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -n '/Ubuntu/p' sample.txt
UbuntuはLinuxディストリビューションのひとつです。
hirotano@hirotano:~$し

指定した文字列の間にある文字列を抽出

ファイルsample.txtから「Ubuntuは」と「です。」の間にある文字列を抽出するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイルから「Ubuntuは」と「です。」の間にある文字列を抽出することができます。

sed -n ‘s/.*Ubuntuは\(.*\)です.*/\1/p’ sample.txt

このコマンドでは、-nオプションを使用して、出力を抑制します。.*Ubuntuは\(.*\)です.*/\1は、抽出するための正規表現です。.*は、任意の文字列を表し、.∗は、括弧内の文字列をキャプチャするためのグループです。Ubuntuはとです。は、正確にマッチさせる文字列を指定します。/\1/pは、キャプチャされた文字列を印刷するためのコマンドです。このコマンドにより、sample.txtファイルから「Ubuntuは」と「です。」の間にある文字列が抽出されます。

実行例
hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -n 's/.*Ubuntuは\(.*\)です.*/\1/p' sample.txt
Linuxディストリビューションのひとつ
hirotano@hirotano:~$
スポンサーリンク

テキスト挿入

指定した行にテキストを挿入

ファイルsample.txt内の「sedコマンド」が含まれる行の先頭にすべて「#」を挿入するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内の「sedコマンド」が含まれる行の先頭にすべて「#」を挿入することができます。

sed -i ‘/sedコマンド/s/^/#/’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。/sedコマンド/は、対象とする行を指定する正規表現です。s/^/#/は、先頭に#を挿入するための置換コマンドです。^は、行頭を表し、#は、挿入する文字列を表します。このコマンドにより、sample.txtファイル内の「sedコマンド」が含まれる行の先頭にすべて「#」が挿入されます。

実行例
hirotano@hirotano:~$ cat sample.txt                   
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i '/sedコマンド/s/^/#/' sample.txt
hirotano@hirotano:~$ cat sample.txt                         
UbuntuはLinuxディストリビューションのひとつです。
#sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$

指定した行に新しい行を挿入

ファイルsample.txtの3行目の上に新しい行として、「この行は新しい行です」を挿入するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイルの3行目の上に新しい行として、「この行は新しい行です」を挿入することができます。

sed -i ‘3iこの行は新しい行です’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。3iは、挿入するための挿入コマンドです。このコマンドにより、sample.txtファイルの3行目の上に新しい行として「この行は新しい行です」が挿入されます。

実行例
hirotano@hirotano:~$ cat sample.txt               
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i '3iこの行は新しい行です' sample.txt
hirotano@hirotano:~$ cat sample.txt                            
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
この行は新しい行です
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$
スポンサーリンク

その他

指定した文字の置換と指定した行の削除を一括で編集

ファイルsample.txt内の「Ubuntu」という文字列をすべて「Linux」に置換し、「sedコマンド」が含まれる行をすべて削除するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、sample.txtファイル内の「Ubuntu」という文字列をすべて「Linux」に置換し、「sedコマンド」が含まれる行をすべて削除することができます。

sed -i -e ‘s/Ubuntu/Linux/g’ -e ‘/sedコマンド/d’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。-eオプションを使用して、複数の置換コマンドを指定します。最初の置換コマンドで、UbuntuをLinuxに置換し、2番目の置換コマンドでsedコマンドが含まれる行を削除します。/sedコマンド/は、削除するパターンを指定する正規表現です。dは、パターンにマッチする行を削除するための削除コマンドです。このコマンドにより、sample.txtファイル内の「Ubuntu」という文字列がすべて「Linux」に置換され、また「sedコマンド」が含まれる行がすべて削除されます。

実行例
hirotano@hirotano:~$ cat sample.txt
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i -e 's/Ubuntu/Linux/g' -e '/sedコマンド/d' sample.txt
hirotano@hirotano:~$ cat sample.txt
LinuxはLinuxディストリビューションのひとつです。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$

バックアップファイルの作成

元のファイルsample.txtをsample.txt.bakという名前のバックアップファイルとして保存し、同時に「Ubuntu」という文字列をすべて「Linux」に置換するsedコマンドを出力してください。

出力(ChatGPT)
以下のようなsedコマンドを使用して、元のファイルsample.txtをsample.txt.bakという名前のバックアップファイルとして保存し、同時に「Ubuntu」という文字列をすべて「Linux」に置換することができます。

sed -i.bak ‘s/Ubuntu/Linux/g’ sample.txt

このコマンドでは、-iオプションを使用して、変更をファイルに直接反映させます。.bakは、バックアップファイルの拡張子を指定するオプションです。このコマンドにより、元のsample.txtファイルはsample.txt.bakとしてバックアップされ、同時に「Ubuntu」という文字列がすべて「Linux」に置換されます。

実行例

hirotano@hirotano:~$ cat sample.txt 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ sed -i.bak 's/Ubuntu/Linux/g' sample.txt
hirotano@hirotano:~$ ls
bin  sample.txt  sample.txt.bak
hirotano@hirotano:~$ cat sample.txt                          
LinuxはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$ cat sample.txt.bak 
UbuntuはLinuxディストリビューションのひとつです。
sedコマンドはテキストの編集に用いられます。
正規表現を使ってテキストを置換することができます。
hirotano@hirotano:~$

sedコマンドで何ができるのかを覚えておけば、コマンドの書き方を無理して覚える必要はありません。ChatGPTで簡単にコマンドを作成することができます。

コメント