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
シェルによって実装されている)よりも一般的な置換です。どちらも正規表現を使用せず、同じ種類の操作を実行できません。シェルワイルドカードモードありgrep
、sed
または を使用しますawk
。
シェルで正規表現を使用するには、シェルがそれをサポートする必要があります(多くのシェルで提供されているがUnixシェルの標準機能ではない)、シェルが提供する構文を使用する必要があります。この場合は内部演算子をbash
使用してください。=~
[[ ... ]]
何かの目的を指します。基本的な正規表現(拡大する正規表現)は、標準ユーティリティによって制限された方法で実装することもできますexpr
。しかし、これはほとんど使用されません。
問題の元の定式化:
あなたは現在の仕事に適したツールを選択します。
ツールと基本用途:
シェル内でを使用して、
=~
シェル変数に格納されている文字列に正規表現を適用できます。これは通常、文字列が特定の式と一致するかどうかをテストし、部分文字列を抽出するために使用されます。ユーザーが入力した入力を検証したり、短い文字列を処理するなどの操作に最適です。[[ ... ]]
bash
ループ内で 1 行ずつ処理される操作は含まれません。。grep
より簡単なファイル処理操作に使用できます。パターン(正規表現または通常の文字列)に基づいてストリームまたは1つ以上のファイルから行を抽出するのに役立ちます。また、入力データに1つ以上のパターンがあるかどうかをテストすることもできます。実行するために使用するほとんどのタスクはgrep
実行できますが、sed
その逆の場合は不可能です。ファイルの高度な処理を実行するには、
sed
インライン正規表現置換を使用してストリームまたは1つ以上の文書を編集できます。また、絶対行番号、正規表現、または指定された範囲に基づいて行を追加、追加、置換、または削除できます。ダウンタウンになる編集する、編集操作はsed
通常、テキストエディタを使用して実行する必要がある編集タイプと同じです。実行するために使用するほとんどのタスクはsed
実行できますが、awk
その逆の場合は不可能です。構造化されたテキストデータで作業し、さまざまなデータ操作が必要な場合は、特定の列抽出、数学演算の実行、データフィルタリング、変換、または集計のためのカスタムロジックの適用などの操作のためにテキストファイルを処理することに慣れることができます
awk
。これらの処理には、組み込み機能、特定の正規表現に一致するレコードにカスタムコードを適用する、置換に正規表現を使用するなどがあります。sed
awk
awk
JSON、YAML、XML、CSV(単純なカンマ区切り値よりも高度な引用規則を使用する)などの一部の構造化形式では、引用と文字エンコーディングの両方で書式規則がどのように適用されるかについての注意と理解が必要です。このタイプのデータには、
jq
Miller(mlr
)xmlstarlet
などの特別な処理ソフトウェアを使用する必要があります。csvkit
これらのツールの多くを使用すると、現在の作業に必要な場合は正規表現を使用して特定のデータを安全に処理できます。
他の方法よりも作業から始めてツールを選択する方が一般的です。