用包含匹配的字符串替换正则表达式匹配

Roh*_*rma 2 sed text-processing regular-expression files

我有一个带有文本的文件

Afghanistan=+93
Albania=+355
Algeria=+213
American Samoa=+1
Andorra=+376
Angola=+244
Run Code Online (Sandbox Code Playgroud)

它具有所有国家/地区列表及其拨号代码。

我想更换:

Afghanistan=+93Afghanistan(+93)=+93

我可以将选择模式设为=\+[0-9]*,但是替换模式字符串是什么?

我知道\1这是用于选择的捕获匹配,但它似乎不适用于sed. 所以正则表达式需要有选择。

我如何使用 sed 或任何其他 unix 工具来做到这一点?

Fel*_*xJN 8

sed 's/=\(+[0-9]\{1,3\}\)/(\1)=\1/' 
Run Code Online (Sandbox Code Playgroud)

为了解决您的问题(据我所知):

需要记住的模式sed用括号括起来——它们的外观定义了它们的索引号。例如:

sed 's/\(<memorized_pattern_1>\)<not_memorized>\(<memorized_pattern_2>\)/\2\1/'
Run Code Online (Sandbox Code Playgroud)

将交换模式 1 和 2 并删除中间的模式。