Как переставить числа с помощью SED (транспозиция) - PullRequest
1 голос
/ 18 февраля 2020

У меня есть строка:

The ID number for product is 721- 971-4321.` 

Я хочу поменять местный код и обменять его на номер внутри, например так: 971- 721-4321

Вот что у меня есть:

17s/\([654]\)-\([817]\)/\2-\1/

Таким образом, номер находится в строке 17 в текстовом файле. В строке есть другие вещи, но я хочу изменить только номер.

Когда я запускаю скрипт, ничего не происходит. Любой совет, как это исправить.

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Не могли бы вы попробовать следующее.

sed 's/\([^0-9]*\)\([^-]*\)\([^0-9]*\)\([^-]*\)\(.*\)/\1\4\3\2\5/' Input_file

Объяснение: Я использую здесь возможность обратной ссылки sed здесь. Где с помощью регулярных выражений я создаю 5 временных буферов и затем обращаюсь к ним в переупорядочении, чтобы сделать вывод в соответствии с запросом OP.

Вывод будет следующим:

The ID number for product is 971- 721-4321.
0 голосов
/ 20 февраля 2020

Это может сработать для вас (GNU sed):

sed -E 's/([0-9]+-) ([0-9]+-)/\2 \1/' file
...