正規表現の一致を一致を含む文字列に置き換えます。

正規表現の一致を一致を含む文字列に置き換えます。

テキストを含むファイルがあります。

Afghanistan=+93
Albania=+355
Algeria=+213
American Samoa=+1
Andorra=+376
Angola=+244

これには、すべての国とその国のダイヤルコードのリストが含まれます。

交換したい項目:

Afghanistan=+93そしてAfghanistan(+93)=+93

選択パターンをとして取得できますが、=\+[0-9]*代替パターン文字列は何ですか?

私は\1これが選択マッチをキャプチャしていることを知っていますが、うまくいかないようですsed。したがって、正規表現には選択が必要です。

sedまたは他のUNIXツールを使用してこれをどのように実行できますか?

答え1

sed 's/=\(+[0-9]\{1,3\}\)/(\1)=\1/' 

問題を解決するには(私の知る限り):

覚えておくべきパターンはsed括弧で囲む必要があります。パターンの外観はインデックス番号を定義します。たとえば、

sed 's/\(<memorized_pattern_1>\)<not_memorized>\(<memorized_pattern_2>\)/\2\1/'

パターン 1 と 2 が変わり、その間のパターンが削除されます。

答え2

sed 's/=\([^= ]*\) *$/(\1)&/' <in >out

上記のコードは、1行の最後の等号とその後のすべての文字のみを置き換えます。

  1. コピーいいえ二つの括弧で囲まれた空間(行にスペースがある場合)

  2. 完全一致パターンが再び表示されます。

右に(代替のための交換フィールドs/// \1最初の\(グループのキャプチャを\)表し&、一致パターン全体をグループとして表します。だから...

sed 's/=\([^= ]*\) *$/(\1)&/' <<\IN
    Afghanistan=+93
    Albania=+355
    Algeria=+213
    American Samoa=+1
    Andorra=+376
    Angola=+244
IN

    Afghanistan(+93)=+93
    Albania(+355)=+355
    Algeria(+213)=+213
    American Samoa(+1)=+1
    Andorra(+376)=+376
    Angola(+244)=+244

答え3

以下を使用してください。

sed 's/=\(+[0-9]\+\)/(\1)=\1/' file

文字列の後に=+少なくとも1つの数字([0-9]\+)が続くものを検索し、(\1)=\1すべての数字を必要な形式()に置き換えます。

答え4

すべてのデータがfileというファイルにあると仮定すると、

     awk -F "=" '{print $1"("$2")="$2}' file

関連情報