###導入###
| Linux Foundation Certified System Administrators (LFCS) にとってもう 1 つの便利なコマンドは、「sed」です。これは、もともと「Streaming Editor」の略称でした。
|
「sed」コマンドは、ファイルをストリームとして編集できるエディタです。ファイルをストリーミングする方法は、別のコマンドからファイルをパイプ (> または |) するか、「sed」に直接ロードします。
このコマンドは、ファイルが表示されず、視覚的な編集が許可されないことを除いて、他のエディターと同じように機能します。コマンドはストリームを操作するために「sed」に渡されます。
「sed」では 5 つの基本的なことができます。もちろん、「sed」は非常に強力で、その他の高度な機能も備えていますが、注目する必要があるのは基本的な 5 つのことだけです。 5 つの関数タイプは次のとおりです。
検索###
交換する###
消去###
に追加###
変更/変換
コマンドパラメータの説明に入る前に、基本的な構文を確認する必要があります。
###文法###
「sed」コマンドの構文は次のとおりです。
リーリー
これらの「オプション」については、この記事の該当するセクションで説明します。 「コマンド」には、正規表現の検索および置換パターンを使用できます。 「sed」がどのように機能するのかを学び、基本的なコマンドを学びましょう。前に述べたように、「sed」は非常に強力なツールであり、この記事ではさらに多くのオプションを使用できます。
サンプルファイル
ターミナルを開くと、「sed」サンプルのファイルを作成できます。次のコマンドを実行します:
リーリー
これで、HOME フォルダーに grephelp.txt という名前のファイルが作成されるはずです。このファイルの内容は、grep コマンドのヘルプ手順です。
###検索###
特定の文字列の検索はエディターの一般的な機能であり、「sed」での検索の実行も例外ではありません。
検索を実行して、ファイル内の文字列を見つけます。基本的な検索方法を見てみましょう。
サンプル ファイル内で PATTERN という単語を検索する場合は、次のコマンドを使用します。
リーリー
注: コマンドを切り取って貼り付ける場合は、必ず一重引用符をキーボードの標準の一重引用符に置き換えてください。
パラメータ -n は、各行 (p コマンドで指定された行を除く) の自動印刷を抑制するために使用されます。デフォルトでは、「sed」に入力された各行は標準出力 (stdout) に出力されます。 「-n」オプションを指定せずに上記のコマンドを実行すると、元のファイルの各行と一致する行が表示されます。
検索するファイル名は、「サンプル ファイル」セクションで作成した「grephelp.txt」です。
残りの部分は 's/PATTERN/PATTERN/p' です。このセクションは基本的に 4 つの部分に分かれています。 s の最初の部分は、置換または検索と置換を実行することを指定します。
残りの 2 番目と 3 番目の部分はパターンです。最初は検索するパターンで、最後はストリーム内の一致する文字列を置換するパターンです。この例では、文字列 PATTERN を検索し、それを PATTERN に置き換えます。同じ文字列を検索して置換することにより、画面上であってもファイルはまったく変更されません。
最後のコマンドは p です。置換後に新しい行を印刷することを指定します。もちろん、同じ文字列を置き換えるので何も変わりません。 -n パラメータを使用して行の印刷を抑制したため、変更された行は p コマンドを使用して印刷されます。
この完全なコマンドを使用すると、検索を実行し、一致する結果を表示できます。
###交換する###
特定の文字列を検索する場合、新しい文字列を一致する文字列に置き換えることができます。文字列を別の文字列に置換することは、非常に一般的な操作です。
次のコマンドを使用して同じ検索を実行できます:
リーリー
このとき、「PATTERN」という文字列が「Pattern」に変わって表示されます。コマンド cat grephelp.txt を使用してファイルを表示すると、ファイルが変更されていないことがわかります。この変更は、画面上の出力に対してのみ行われます。次のコマンドを使用して、出力を別のファイルにパイプ処理できます:
リーリー
grephelp1.txt という名前の新しいファイルが存在し、変更されたファイルがその中に保存されます。 p を 4 番目のオプションとして残した場合、問題は、置換された文字列の各行がファイル内で 2 回繰り返されることです。 「-n」パラメータを削除して、すべての行を印刷できるようにすることもできます。
文字列を同じ文字列に置き換えるもう 1 つの方法は、& 記号を使用して検索文字列を表すことです。たとえば、コマンド s/PATTERN/&/p も同じ効果があります。文字列を追加できます。たとえば、S を追加するには、コマンド s/PATTERN/&S/p を使用します。
各行の特定のパターンのみを置換したい場合はどうすればよいでしょうか?特定の一致箇所を置換するように指定できます。もちろん、各行の置換は特定の番号です。たとえば、サンプル ファイルには多くのダッシュが含まれています。一部の行には少なくとも 2 つのダッシュがあるため、各行の 2 番目のダッシュを別の文字に置き換えることができます。各行の 2 番目のダッシュをアスタリスク * に置き換えるコマンドは次のようになります:
リーリー
ここでは、元の を使用して置換を実行します。文字 - は * に置き換えられます。 2 は、各行に 2 番目の - が存在する場合はそれを置き換えることを意味します。コマンド 2 を省略すると、最初に出現したダッシュが置き換えられます。すべての行のダッシュではなく、最初のダッシュのみが置き換えられます。
行上のすべてのダッシュを検索してアスタリスクに置き換える場合は、 g コマンドを使用します。
リーリー
コマンドは組み合わせることもできます。 2 番目に出現したダッシュを置き換える場合、コマンドは次のようになります:
sed 's/-/*/2g' grephelp.txt
ログイン後にコピー
现在从第二个开始出现的破折号将被星号取代。
删除
搜索过程中有很多时候你可能想要完全删除搜索字符串。
例如,如果要从文件中删除所有破折号,你可以使用以下命令:
sed 's/-//g' grephelp.txt
ログイン後にコピー
替换字符串为空白,因此匹配的字符串将被删除。
添加
当找到匹配时,你可以添加一行特定的文本,来使这行在浏览或打印中突出。
如果要在匹配后插入新行,那么使用 a 命令,后面跟上新行的字符串。还包括要匹配的字符串。例如,我们可以找到一个 --,并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。
sed '/--/ a "double dash before this line"' grephelp.txt
ログイン後にコピー
如果要在包含匹配字符串的行之前加上这行,请使用 i 命令,如下所示:
sed '/--/ i "double dash after this line"' grephelp.txt
ログイン後にコピー
改变/变换
如果需要改变/变换一行,则可以使用命令 c。
假设我们有个有一些私人信息的文档,我们需要更改包含特定字符串的行。c 命令将改变整行,而不仅仅是搜索字符串。
假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是:
sed '/PATTERN/ c This line is Top Secret' grephelp.txt
ログイン後にコピー
可以进行更改特定字母的大小写的转换。例如,我们可以使用命令 y 将所有小写 a 更改为大写 A,如下所示:
sed 'y/a/A/' grephelp.txt
ログイン後にコピー
可以指定多个字母,如 abdg,如下命令所示:
sed 'y/abdg/ABDG/' grephelp.txt
ログイン後にコピー
确保第二组字母与第一组字母的顺序相同,否则会被替换和转换。例如,字符串 y/a/D/ 将用大写 D 替换所有小写的 a。
就地更改
如果你确实要更改所使用的文件,请使用 -i 选项。
例如,要将 PATTERN 改为 Pattern,并对文件进行更改,则命令为:
sed -i 's/PATTERN/Pattern/' grephelp.txt
ログイン後にコピー
现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。
练习这些命令,并确保你理解它们。“sed” 命令非常强大。
(题图:Pixabay,CC0)