文字列から等号の周囲の先行および末尾のスペースを削除する方法を決定しようとしています。空白がある場合とない場合があります。 0、1、またはそれ以上の等号がある場合があります。
私はこれを使用しようとしましたが、sed
悲惨に失敗し、うまくいかないことを示す価値さえありません。作業に間違ったツールを使用しているようです。sed
この問題を解決するために正規表現を使用することはできないようですが、私が間違っている可能性があります。
等号の間のスペースを削除する方法は?
実際の問題は概念的に簡単です。ゼロ以上のオプションを含む文字列がありますa=b
。オプションは、または同様のものとして提供a=b
できa = b
ますa= b
。で正規化する必要がありますa=b
。
など、複数行の文字列にコーナーケースが存在する可能性がありますCR
。LF
スペースを壊すことが重要なポイントまで到達できませんでした。そうすれば、それを奇形と呼び、複数行の文字列を拒否したいと思います。
答え1
don_crisstiもJulie Pelletierも完璧なコメントを答えに変えなかったので、Donは次の結論に達しました。
sed 's/[[:blank:]]*=[[:blank:]]*/=/g'
sed
...目標を達成するために正規表現と文字クラスを使用します。内部的に[:blank:]
空白またはタブをキャプチャし、外部で[]*
ゼロ個以上の空白/タブキャプチャを表します。等号はそれ自体を表し、同じ正規表現を繰り返します。 (オプション)スペース、等号、および(オプション)スペースはすべて等号に置き換えられ、このg
フラグはsedに行が表示されるたびに検索と置換を繰り返すように指示します。
入力例:
$ cat input
a=b a = b a= b a =b
そして出力:
$ sed 's/[[:blank:]]*=[[:blank:]]*/=/g' input
a=b a=b a=b a=b
答え2
私はemacsを使ってこれをします:
$x replace-regexp
\s *=\s *
=
等号の周りのスペースを識別して置き換える\s *=\s *
正規表現はどこにありますか?=
通常は\sC
文字クラスとして解釈されC
、この場合は空白(タブでもあります)です。スペースのみが必要な場合は、*
(*前のスペースなど)を使用してください。
2番目の問題があるようです。How do I delete whitespace between equal signs?
この場合は、次のことを行う必要があります。
$x replace-regexp
=\s *=
==
私はいつもsedとawkをもう一度見つけなければなりません。利用可能な場合は常にemacsを使用します。 Emacsでは、をC-h i
使用して情報システムにアクセスし、m emacs
Emacsの情報にアクセスしてregexp
その情報ページ内で検索する必要があります。
答え3
言及されていませんが、Perl:
s/\s*=\s*/=/g;