Bash 組み込み正規表現と sed コマンドと grep コマンド

Bash 組み込み正規表現と sed コマンドと grep コマンド

Bashにはパターンマッチングのための正規表現が組み込まれています。 sed コマンドと egrep コマンドでもこの操作を実行できます。

組み込みvsコマンドを選択するとどのような利点がありますか?どちらが速く、他の側面を比較するのか知りたいです。

修正する:

申し訳ありません。いくつかの Bash 機能を正規表現と間違えた可能性があります。

「組み込み正規表現」とは、Bashで言及された文字列操作を意味します。Bash 文字列操作特に、

文字列の削除

stringZ=abcABC123ABCabc
echo ${stringZ#a*C}      # 123ABCabc

文字列の置き換え

stringZ=abcABC123ABCabc
echo ${stringZ/a?c/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.

正規表現ですか?

ベストアンサー1

更新された問題を解決してください。

厳密に言えば、あなたが示したのはシェルで正規表現を適用したものではありません。両方ともパラメータ拡張を使用します。シェルボール、ファイル名拡張を実行するためにファイル名globbingパターンとして使用するのと同じパターンですcat text*.txt >combined

最初の拡張は標準のプレフィックス文字列の削除ですが、2番目の拡張は非標準(ただし他のいくつかのbashシェルによって実装されている)よりも一般的な置換です。どちらも正規表現を使用せず、同じ種類の操作を実行できません。シェルワイルドカードモードありgrepsedまたは を使用しますawk

シェルで正規表現を使用するには、シェルがそれをサポートする必要があります(多くのシェルで提供されているがUnixシェルの標準機能ではない)、シェルが提供する構文を使用する必要があります。この場合は内部演算子をbash使用してください。=~[[ ... ]]

何かの目的を指します。基本的な正規表現(拡大する正規表現)は、標準ユーティリティによって制限された方法で実装することもできますexpr。しかし、これはほとんど使用されません。


問題の元の定式化:

あなたは現在の仕事に適したツールを選択します。

ツールと基本用途:

  1. シェル内でを使用して、=~シェル変数に格納されている文字列に正規表現を適用できます。これは通常、文字列が特定の式と一致するかどうかをテストし、部分文字列を抽出するために使用されます。ユーザーが入力した入力を検証したり、短い文字列を処理するなどの操作に最適です。[[ ... ]]bashループ内で 1 行ずつ処理される操作は含まれません。

  2. grepより簡単なファイル処理操作に使用できます。パターン(正規表現または通常の文字列)に基づいてストリームまたは1つ以上のファイルから行を抽出するのに役立ちます。また、入力データに1つ以上のパターンがあるかどうかをテストすることもできます。実行するために使用するほとんどのタスクはgrep実行できますが、sedその逆の場合は不可能です。

  3. ファイルの高度な処理を実行するには、sedインライン正規表現置換を使用してストリームまたは1つ以上の文書を編集できます。また、絶対行番号、正規表現、または指定された範囲に基づいて行を追加、追加、置換、または削除できます。ダウンタウンになる編集する、編集操作はsed通常、テキストエディタを使用して実行する必要がある編集タイプと同じです。実行するために使用するほとんどのタスクはsed実行できますが、awkその逆の場合は不可能です。

  4. 構造化されたテキストデータで作業し、さまざまなデータ操作が必要な場合は、特定の列抽出、数学演算の実行、データフィルタリング、変換、または集計のためのカスタムロジックの適用などの操作のためにテキストファイルを処理することに慣れることができますawk。これらの処理には、組み込み機能、特定の正規表現に一致するレコードにカスタムコードを適用する、置換に正規表現を使用するなどがあります。sedawkawk

  5. JSON、YAML、XML、CSV(単純なカンマ区切り値よりも高度な引用規則を使用する)などの一部の構造化形式では、引用と文字エンコーディングの両方で書式規則がどのように適用されるかについての注意と理解が必要です。このタイプのデータには、jqMiller(mlrxmlstarletなどの特別な処理ソフトウェアを使用する必要があります。csvkitこれらのツールの多くを使用すると、現在の作業に必要な場合は正規表現を使用して特定のデータを安全に処理できます。

他の方法よりも作業から始めてツールを選択する方が一般的です。

おすすめ記事