Замените регулярное выражение на строку, содержащую совпадение

У меня есть файл с текстом как

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

В нем есть весь список стран и его код набора.

Я хочу заменить:

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

Я могу получить шаблон выбора как =\+[0-9]* , но какая будет строка шаблона замены?

Я знаю, что \1 – это захваченное совпадение для выбора, но, похоже, оно не работает для sed . Поэтому регулярное выражение должно иметь выбор.

Как я могу это сделать с помощью sed или любых других инструментов unix?

  • Печать регулярного выражения Sed в файл .txt
  • Удалите n-ю строку из сопоставленной строки (которая встречается только один раз в файле)
  • удаление первого и последнего символов каждой строки из командной строки
  • Редактирование вложенного текста и определенных строк в файле с использованием сценария bash
  • Извлечь ключевое слово из строки
  • добавить в файл добавочный столбец идентификатора
  • Проблема с sed в массиве, содержащем строки, содержащие пробелы
  • Считайте строки с определенным целым числом в столбце
  • 4 Solutions collect form web for “Замените регулярное выражение на строку, содержащую совпадение”

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

    Чтобы решить вашу проблему (как я понял):

    Шаблоны, которые необходимо запомнить в sed , должны быть заключены в круглые скобки – их внешний вид определяет их номер индекса. Например:

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

    заменит шаблоны 1 и 2 и удалит средний.

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

    Вышеуказанное будет просто заменять последний знак равенства на строке и все символы, которые следуют сначала с …

    1. Копия тех, которые следуют и которые не являются пространством, окруженным двумя паранами (в случае, если на линии есть любые конечные пробелы)

    2. Весь согласованный шаблон снова и снова.

    С правой стороны (поле замены s/// ubstitution) \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 

    Используйте это:

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

    Он ищет =+ за которым следует хотя бы одна цифра ( [0-9]\+ ) и заменяет все нужным форматом ( (\1)=\1 ).

    Предположим, что все данные находятся в файле с именем file, затем

      awk -F "=" '{print $1"("$2")="$2}' file 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.