テキストを含むファイルがあります。
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行の最後の等号とその後のすべての文字のみを置き換えます。
コピーいいえ二つの括弧で囲まれた空間(行にスペースがある場合)
完全一致パターンが再び表示されます。
右に(代替のための交換フィールド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