技術ノート Linux sed ストリームエディタで正規表現を使用してテキストを変更する方法

sed ストリームエディタで正規表現を使用してテキストを変更する方法

sed ストリームエディタで正規表現を使用してテキストを変更する方法

世界中のすべてのコンピュータ ユーザーは、遅かれ早かれ手動または自動でテキスト文字列を変更するでしょう。文字列やファイルに一括でテキスト変更を加えることができる sed ストリーム エディタ について説明します。

コマンドラインでの正規表現

sed ストリームエディタで正規表現を使用してテキストを変更する方法

多くの Linux ディストリビューションでデフォルトで利用できるツールである sed ストリーム エディタを使用すると、テキストがファイル内にある場合でも、コマンド ラインの単なる文字列であっても、簡単かつ直接的な方法でテキストを解析して変換できます。また、ディレクトリ リスト、プロセス リスト出力、およびターミナル セッションに出入りする可能性のあるその他のほとんどの種類の情報を解析することもできます。

sed ストリームエディタで正規表現を使用してテキストを変更する方法

sed が Linux ディストリビューションで利用できるかどうかを確認するには、次のように入力します。

 sed --version
sed ストリームエディタで正規表現を使用してテキストを変更する方法

コマンドラインで:

sed ストリームエディタで正規表現を使用してテキストを変更する方法

お使いのバージョンがここに示されているバージョンよりも少し古い場合でも心配する必要はありません。ここで説明する例では、ほぼ間違いなく問題ありません。このツールがディストリビューションで利用できない場合は、次のコマンドを使用してインストールできます。

 sudo apt install sed

Ubuntu/Debian ベースのオペレーティング システムの場合、または

sudo yum install sed

RedHat/RPM ベースのオペレーティング システム用。

 sed

RegEx または正規表現と呼ばれるものを使用して、小さなテキスト変換を適用します。正規表現は、より複雑なテキストベースの検索、置換、および変更操作を人間が判読可能な形式で表現する形式および方法です。正規表現は複雑なので、初心者にとっては読みにくい場合があります。 Regex の読み取りと書き込み方法の詳細については、ガイド 「実際に Regex を使用する方法」 を参照してください。

この記事では、理解しやすく読みやすい正規表現にこだわります。たとえば、次は単純な置き換えです。

ご覧のとおり、小さなテキストをエコーし​​、その後 sed ツールを使用して変換しました。 「s」(代替)sed コマンドを使用して、変更したい内容を示しました。これを別の言い方で読むこともできます

s| from |to|

ここで ‘|’はセクション/フィールド間の区切り文字、「s」はコマンド、「from」と「to」は「s」コマンドに渡される 2 つのオプションです。

このようにして、「こんにちは、クラウドに精通した IT ファン!」を変革しました。 「cloudsavvyit.com ファンの皆さん、こんにちは!」 sed ストリーム エディタを使用してテキストの一部を変更するだけです。もう少し複雑な例を見てみましょう。

ここではまず、次のコマンドを使用して 3 行のファイルを作成します。

 echo

ファイルへのリダイレクトを伴うコマンド (「>」は新しいファイルを作成し、同じ名前のファイルが存在する場合は上書きします。「>>」はファイルを変更せずにファイルに追加します)。次に、次を使用してファイルの内容を表示しました。

 cat

指示。

次に、ファイルの内容を次のように変換しました。

 sed

ツールを直接使用します。これを行うには、ファイルをその場で編集する sed に「-i」オプションを指定しました。実際のテキスト変換命令は以前と同じです。最後に、コマンドの最後にファイル名を指定します。次に、ファイルの内容をチェックして、入力がどのように変更されたかを確認します。

すでにおわかりのように、あるいは過去の経験からすでにご存知のとおり、sed ツールには多くの機能があります。

正規表現と sed テキスト変換命令の記述方法を拡張して、少し味を加えてみましょう。

この例では、「_H」を文字「h」に置き換え、グローバル (sed に渡される最初の命令の終わり近くにある「g」修飾子に注意してください) かつ大文字と小文字を区別しない方法 (「i」に注意してください) でそれを行いました。修飾子も最初の命令の終わり近くにあります)。 「i」修飾子があるため、ファイルに「H」が含まれている場合でも、「h」は一致します。

次に、新しい命令 (他の多くのコーディング言語と同様に、命令は「;」で終了/終了します) を開始し、基本的に「.com」を検索して何も置き換えることで削除しました。

さまざまなフィールド/コマンド オプションの区切り記号をどのように使用したかにも注目してください。最初の例では「|」を使用しました。これは全体的に使いやすく、かなり珍しいフィールド区切り文字です。多くの人は「/」を使用しますが、「/」を含むパス名を解析するときに問題が発生する可能性があります。

さまざまなフィールド/コマンド オプションの区切り文字を使用できるため、テキスト文字列に特定の文字が実際に含まれる場合、または含まれる可能性がある場合に、別の区切り文字を簡単に使用できます。

sed ストリームエディタで正規表現を使用してテキストを変更する方法

ファイルでの sed の使用

ファイルにテキストを挿入する別の sed ベースの例を見てみましょう。

この例では、5 行のファイルを作成し、その後、少し複雑な sed 命令を使用して、2 行ごとに「—」区切り文字を挿入しました。構文自体でほとんど説明されていますが、興味深いのは、’r’ (ファイルからのテキストの読み取り/追加) コマンドが、セパレーターなしでメイン命令内で挿入ファイル名を直接指定していることです。

また、正規表現構文を学習することに加えて、sed 構文を詳しく学習することが有益であることもわかり始めています。これは、2 つの新しい外国語を学習するようなものですが、利点は、sed 構文がさらに複雑になる必要があるにつれて拡張できることです。

特定のテキスト領域を別のものに置き換える例を見てみましょう。

この例では、「3」というテキストを検索し、その行を「C」から「Z」に置き換えます。 sed がいかに多用途であるかがわかります。

最後に、他のタイプの入力の解析を見てみましょう。

ご覧のとおり、3 つのファイルを作成し、次のコマンドを使用してディレクトリのリストをリクエストしました。

 ls

指示。次に、その出力を sed への入力として取得し (Linux パイプ コマンド ‘|’ を使用)、ディレクトリ リストの一部をアンダースコアに変換しました。

sed ストリーム エディタは、入力が単純​​なものであるかどうかにかかわらず、ターミナルのコマンド ラインから直接ほぼすべてのテキストを解析および変換するのに役立つ多用途ツールです。

 echo

ステートメント、他の Linux ツール、またはフラット テキスト ファイルから。 楽しむ!

「 sed ストリームエディタで正規表現を使用してテキストを変更する方法」に関するベスト動画選定!

知ってると役に立つ正規表現入門
https://www.youtube.com/watch?v=T7Y2kfMm7kk&pp=ygVpIHNlZCDjgrnjg4jjg6rjg7zjg6Djgqjjg4fjgqPjgr_jgafmraPopo_ooajnj77jgpLkvb_nlKjjgZfjgabjg4bjgq3jgrnjg4jjgpLlpInmm7TjgZnjgovmlrnms5UmaGw9e2xhbmd9
ニューロイメージャーのための Unix #8: Sed コマンド