sedやその他のツールを使用して正規表現の一致をどのように変更できますか?

sedやその他のツールを使用して正規表現の一致をどのように変更できますか?

ファイルのテキストを操作する必要があります。)前にカンマである各数字の後に閉じ括弧を追加する必要があります。 – ,– たとえば、

  • ,4   ➜,4)
  • ,15,15)

私はこれを行うための正しい方法を見つけようとしていますsed。次のことを試しましたが、1桁の数字では機能しますが、2桁の数字には拡張されないようです。したがって、上記の最初の行は大丈夫ですが、2番目の行はそうではありません。

sudo sed 's/,\([0-9]\)/,\1)/g'ファイル名

その後、次の2桁の数字を試しました。

sudo sed 's/,\([0-9]([0-9]?\)/,\1)/g'ファイル名

これは何もしません。エラーメッセージは表示されませんが、ファイルは変更されていません。必須番号と2番目の選択番号を検索してから代替テキストに移動する正しい方法は何ですか?まだこの作業を完了する必要があります。

  • ,15,15)

どんなアドバイスも本当にありがとうございます。

答え1

ほぼすべて来ました。以下を試してください。

sudo sed 's/,\([0-9]\{1,2\}\)/,\1\)/g' filename

あなたのコマンドに加えて、以前の正規表現と\{1,2\}1〜2回一致するコマンド(たとえば、少なくとも1回から最大2回)を追加しました。

\([0-9]\{1,2\}\)説明する:

  • [0-9]0 から 9 までの単一の数字と一致します。
  • {1,2}前の正規表現と1回、最大2回一致します。したがって、1つの一致は必須で、2番目の一致はオプションです(必要に応じて)。
  • ()後で参照できるように正規表現グループが作成されます。
  • また、文字通り処理されないように、すべての拡張正規表現構文の前に「\」を使用することに注意してください。-rgnuと一緒にスイッチ(拡張正規表現)を使用することができsed、この場合は次のように書くことができます。

    sudo sed -r 's/,([0-9]{1,2})/,\1\)/g' filename
    

編集する:カンマの後の数字(少なくとも1つ以上)を一致させるには、次のようにします。

sudo sed 's/,\([0-9]\{1,\}\)/,\1\)/g' filename

またはより簡単に:

sudo sed 's/,\([0-9]\+\)/,\1\)/g' filename

関連情報