ジャンナのテーマ ライセンスが検証されていません. テーマ オプション ページに移動してライセンスを検証します. ドメイン名ごとに XNUMX つのライセンスが必要です.

Linuxでテキストを編集するためのSedコマンドのベストな使い方

Linuxでsedコマンドを使ってテキストを編集する9つの方法

指図 sed Linuxシステムでは、sedはシステム管理者や開発者が迅速かつ柔軟なテキスト編集に利用する強力なツールです。ファイル内の単語の置換、特定の行の削除、テキストの一括編集など、sedはテキストファイルの操作を容易にする強力なショートカットを提供します。このコマンドの正しい使い方を習得することで、複雑なタスクを最もシンプルなコマンドで実行できるようになります。この記事では、sedの最も重要な実用的な使い方を、具体的な応用例とともに解説します。

Linux のラップトップでターミナルを開いて、Linux でテキストを編集するための sed コマンドのベストな使い方

ストリームエディタであるsedは、Linuxで人気のテキスト編集ツールの一つです。インターフェースを持たないテキストエディタで、コマンドラインから直接、スムーズかつ静かに操作を実行できます。簡単な修正から高度なテキスト変換まで、sedを使って編集作業を楽にする9つの方法をご紹介します。

1. テキストの検索と置換(基本およびガイド付き)

sed の最も一般的な用途はテキストの置換です。私はターミナルウィンドウで大きなファイルを扱う際によく使用します。テキストの検索と置換のためだけに別のテキストエディタを開きたくないからです。ターミナルウィンドウから直接 sed を実行すると、効率と速度が向上するだけでなく、通常の検索・置換ダイアログよりも多くのカスタマイズオプションを利用できます。

テキストの検索と置換の基本的な構造はシンプルです。

sed 's/old/new/' ファイル.txt

Sedコマンドを使ったコンテンツの検索と置換:Linuxでテキストを編集するためのSedコマンドのベストな使い方

ここで、 s コマンドは置換を意味し、old は探しているテキスト (私の場合は Flameshot など)、new は置換するテキスト (Gradia など) です。

デフォルトでは、sedコマンドは各行の最初の出現部分のみを置換します。しかし、多くの場合、対象となる単語のすべての出現部分を置換する必要があります。そのためには、末尾にgを追加します。

sed 's/old/new/g' ファイル.txt

これで、各行のすべての出現が置き換えられます。

s オプションの前に行番号を指定して、特定の行のテキストを置き換えることもできます。

sed '10s/old/new/' ファイル.txt

このコマンドは、10行目のテキストのみを新しいテキストに置き換えます。同様に、sタグの前にカンマで区切られた2つの行番号を指定することで、複数の行範囲のテキストを置き換えることができます。

sed '10,20s/old/new/' ファイル.txt

行固有の置換に加えて、行が特定のパターンに一致する場合にのみ動作するように sed に指示することで、より選択的に行うことができます。

sed '/ERROR/s/old/new/g' ファイル.txt

パターンに基づいて特定の行のみを検索して置換する Linuxでテキストを編集するためのsedコマンドのベストな使い方

この方法では、sed コマンドはパターンに一致する行のテキスト (この場合は error など) のみを置き換え、残りの部分は変更しません。

2. コンテンツの挿入、追加、削除

ファイルを操作する際、私はコンテンツの挿入、追加、削除という3つのタスクを頻繁に実行します。sedコマンドを使用すると、ファイルをエディタで開かなくても、これらの3つのタスクをスムーズかつ効率的に処理できます。

また読む:  WindowsのコマンドプロンプトからLinuxのターミナルに簡単に切り替える方法

まずは挿入から始めましょう。sedコマンドを使えば、ファイル内の任意の場所(特定の行の前または後)にコンテンツを追加できます。例えば、設定ファイルで作業していて、3行目の前に新しい設定を追加したい場合は、iタグを使用します。

sed '3i\
# 新しい設定\
ENABLE_FEATURE=true' config.conf

Linuxでテキストを編集するためのsedコマンドのベストな使い方

同様に、テキストを 10 行目以降に表示したい場合は、i を a に置き換えます。

sed '3a\
テキストファイル.txtを追加しました

最も簡単に覚える方法は、「i」を前に「挿入」し、「a」を後ろに「追加」と考えることです。

場合によっては、行の一部を変更するよりも、行全体を置き換えた方が簡単なことがあります。そのため、c オプションを使用してください。例えば、バージョン番号付きのプロパティファイルを更新する場合は、行全体を置き換えます。

sed '/^version=/c\version=2.0.0' config.conf

このコマンドは古い行を削除し、その場所に新しい行を書き込みます。

Sedコマンドを使った特定行の置換 Linuxでテキストを編集するためのSedコマンドのベストな使い方

新しいものを追加せずに行全体を削除する場合は、d オプションを使用します。

sed '3d' ファイル.txt

これにより、行 3 が削除されます。さらに、次のように範囲を指定して行のブロックを切り取ることもできます。

sed '5,10d' ファイル.txt

これにより、5 行目から 10 行目が削除されます。

前述のように、パターンマッチングを使用してコンテンツを検索・置換した際に、sedを使用してパターンに基づいて削除することもできます。例えば、ログファイルに数千のDEBUGエントリが含まれている場合、それらをすべて一度に削除できます。

sed '/DEBUG/d' ログファイル.txt

これらのコマンドは最初は難しそうに思えるかもしれませんが、使い始めると、数回のキー操作でこれらの基本操作をすばやく実行できるようになります。

3. コンテンツの表示と抽出

デフォルトでは、sedコマンドは処理するすべての行を出力しますが、これは特にログや設定ファイルの場合、煩雑になることがあります。これを制御するには、-nオプションを使用します。このオプションは、明示的に表示を指示しない限り、sedは何も表示しません。このオプションをp(印刷)コマンドと組み合わせることで、表示内容を完全に制御できます。

たとえば、指定したファイルの 5 行目を印刷するには、次のようにします。

sed -n '5p' ファイル.txt
Linuxでテキストを編集するためのsedコマンドのベストな使い方
特定の行範囲を指定することもできます。例えば、15行目から20行目までを出力するには、次のコマンドを実行します。
sed -n '15,20p' ファイル.txt

同様に、数千行に埋もれたエラーなど、特定の単語やパターンを探している場合は、次のようにします。

sed -n '/ERROR/p' ファイル.txt

ここで、sedコマンドはERRORという単語を含む行を検索し、それらの行だけを出力します。これはgrepを実行するのと似ていますが、sedコマンド内で直接実行されるため、複数のプロセスをリンクする場合に便利です。

もう1つの効果的な使い方は、2つのタグ間のテキストフラグメントを抽出することです。システムレジストリをデバッグしていて、STARTタグとENDタグの間のフラグメントだけが必要な状況を想像してみてください。

sed -n '/START/,/END/p' ファイル.txt

これはスマートな識別器として機能し、キーワード間のすべての文字列を抽出します。一致を逆にするには、次のように ! オプションを使用します。

sed -n '/ERROR/!p' ログファイル.txt

これにより、エラーのある行を除くすべての行が印刷され、最終結果に集中してノイズを無視できるようになります。

4. バックアップオプションを使用してファイルをその場で変更する

sedコマンドは実行内容をすべて安全に実行します。ターミナルには結果のみが出力され、元のファイルはそのまま残ります。しかし、最終的には永続的な変更を加えたい場合もあるでしょう。その場合は、-iオプションを使用して、ファイルをその場で変更することができます。

sed -i 's/old/new/g' ファイル.txt

テキストファイル内の古いバージョンをすべて新しいバージョンに直接置き換えます。リダイレクトや追加ファイルは不要で、瞬時に更新されます。ただし、注意点があります。これはファイルを即座に置き換え、元に戻すボタンは表示されません。

また読む:  エミュレーションを逆にしてAndroidをUbuntuからリモートで制御する方法

元のファイルのバックアップを作成するには、バックアップ サフィックスとともに -i を使用します。

sed -i.bak 's/old/new/g' ファイル.txt

sedは、変更を加える前に元のファイルのコピーをfile.txt.bakとして作成します。間違えた場合は、すぐに元に戻すことができます。また、カスタム拡張子を選択することもできます。

sed -i.backup 's/temporary/permanent/g' ファイル.txt
sed -i.$(date +%Y%m%d) 's/foo/bar/g' config.conf

最初のコマンドは file.txt.backup を作成し、2 番目のコマンドは日付付きのバックアップを作成します。これは、構成を繰り返すときに使用するトリックで、バージョンと日付を追跡できるようにします。

5. 複数の変更を一度に適用する

場合によっては、1回の編集だけでは不十分なことがあります。データセットのクリーンアップ、ラベルの統合、あるいは複数の変更が必要な設定ファイルの変更などです。sedコマンドを複数回実行するのは便利ですが、効率的ではありません。代わりに、編集内容をグループ化して、ファイルを一度だけスキャンするようにすることができます。

たとえば、1 回のパスで 2 つの置換を行うには、複数の e タグを使用します。

sed -i -e 's/apple/orange/g' -e 's/pear/grape/g' file.txt

ここでは、リンゴはオレンジに、ナシはブドウになります。より簡潔なスタイルにするには、コマンドをセミコロンで区切って1つの文字列にまとめます。

sed の/赤/青/g; s/リンゴ/オレンジ/g; /draft/d'data.txt

このバージョンでは、色を置き換え、果物の名前を変更し、下書きを含む行を削除します。動作は同じですが、変更が蓄積されるにつれて可読性が低下します。そこで、コマンドをカスタムテキストファイルに移動する必要があります。

6. スクリプトを使って編集を自動化する

繰り返し発生するクリーンアップタスクがある場合(例えば、余分な文字、一貫性のない用語、ランダムなコメントなどの単純なフォーマットエラーを含むファイルが数百個あるプロジェクトなど)、自動化は必須です。ターミナルに行を貼り付ける代わりに、編集内容をテキストファイルに保存し、必要なテキストに適用しましょう。

たとえば、次の行を含む edits.sed ファイルを作成します。

s/リンゴ/オレンジ/g
s/梨/ブドウ/g
/^#/d

これで、すべてを一度に実行できるようになりました。

sed -i -f edits.sed ファイル.txt

sedコマンドは、1つのコマンドで選択したファイルにすべての編集内容を一度に適用します。ただし、編集したいファイルごとにedits.sedルールを作成する必要があります。

7. 正規表現(Regex)を使ったテキスト編集

正規表現は、リテラルなテキストではなくパターンを記述します。つまり、単語の後に数字が続く、行末のテキストなど、データの形状を、正確な単語だけでなく、対象とすることができます。一見すると正規表現は難しそうに思えるかもしれませんが、基本をいくつか学べば、テキスト処理のための洗練されたスイスアーミーナイフを手に入れたような気分になるでしょう。

正規表現はテキストを絞り込むためのツールであるだけでなく、パターンを識別し、データの処理方法を決定するのにも役立ちます。主な記号には以下が含まれます。

また読む:  Linux初心者がスムーズで快適な体験を始めるのに最適なアプリ

^ と $ は行の先頭または末尾のテキストに一致します。

[0-9] のような角括弧は任意の数字に一致し、[aeiouAEIOU] は母音の検索や削除に役立ちます。

ドット。任意の 1 文字を示します。
* と + を使用すると、パターンを必要な回数だけ繰り返すことができます。
正規表現は少し複雑ですが、いくつかの基本を学ぶだけでも、sed などのツールの幅広い可能性が広がります。

姓と名を逆にする次のコマンドを実行します。

sed -E 's/^([A-Za-z]+)[[:space:]]+([A-Za-z]+)$/\2, \1/' names.txt

ファイルは次のようになります。

ジョン・ドウ
ジェーンスミス

出力は次のようになります。

ドウ、ジョン
スミス、ジェーン

正規表現は、奇数をゼロで埋め込んだり、レコードや CSV ファイルから末尾のスペースを削除したりするなど、一貫性の問題も解決します。

sed -E 's/\b([0-9])\b/0\1/g' numbers.txt #先頭にゼロを追加
sed -E 's/[[:space:]]+$//' file.txt #末尾のスペースを削除

8. テキストファイルのクリーニングとフォーマット

特にWindows、Excel、自動生成されたエクスポートなどから生成されたジャンクファイルは、頻繁に発生します。Sedはこれらのデータを素早くクリーンアップし、読み取り、共有、スクリプトへの挿入を容易にします。

よくある例としては、Windowsの行末コードが挙げられます。LinuxでWindowsファイルを開いた際に、^Mという奇妙な文字が表示される場合、それはキャリッジリターン(\r)です。各行末の余分なキャリッジリターンは、以下の手順で削除できます。

sed -i 's/\r$//' ファイル.txt

タブもよくある煩わしいものです。すべてをスペースにまとめるには、次の方法があります。

sed -E 's/\t/ /g' ファイル.txt

さらに、空白行、バックスペース、または一貫性のない単語間隔など、あらゆる場所に空白が入り込みます。sed は次のコマンドでこれを簡単に処理します。

sed -E '/^[[:space:]]*$/d' ファイル.txt
sed -E 's/[[:space:]]+$//' file.txt
sed -E 's/[[:space:]]+/ /g' file.txt

ここで、最初のコマンドは空の行をクリーンアップし、2 番目のコマンドは端の空白を削除し、最後のコマンドは複数のスペースを 1 つのスペースに圧縮して、整然とした均一なテキストを作成します。

9. 他のコマンドとの組み合わせ

sed の好きな点の一つは、他の Bash コマンドとシームレスに連携できることです。出力のトリミング、情報の抽出、処理済みファイルの比較、複数のファイルにわたる編集など、これらはすべて、1行の簡単なコマンドからでも、長いスクリプト内でも実行できます。

例えば、ps auxは通常、必要以上の出力をします。しかし、これをsedにリンクすると、最初の5行だけが残ります。

ps 補助 | sed -n '1,5p'
ps auxコマンドでsedを使用して制限された出力を取得する Linuxでテキストを編集するためのsedコマンドの最良の方法
grepとsedを組み合わせて特定の情報を抽出することもできます。例えば、タイムスタンプが角括弧で囲まれたエラーメッセージでいっぱいのログがある場合、次のようにしてタイムスタンプだけを抽出します。
grep 'ERROR' ログファイル | sed -E 's/.*\[([0-9-: ]+)\].*/\1/p'

これらはほんの一例です。sedはdiff、find、xargsなど、様々なコマンドと組み合わせることができます。複雑な文字列を整形することで、次のコマンドのパフォーマンスが向上します。

単純な検索・置換操作から正規表現を活用した複雑な変換まで、sed は膨大な手作業時間を節約するソリューションを提供します。しかし、他の Linux コマンドと同様に、習得の鍵は日々の練習です。頻繁に使用すれば、すぐに使いこなせるようになるでしょう。

Linuxでsedコマンドを使うと、テキストやファイルをより速く、より効率的に操作できるようになります。手動編集やグラフィカルツールに頼る代わりに、複雑な変更をコマンドライン1つで実行できます。sedの例を詳しく見ていくと、その柔軟性と時間と労力の節約能力がおわかりいただけるでしょう。sedはLinuxユーザーや開発者にとって欠かせないツールです。

トップボタンに移動