У меня есть простой ввод, такой как:
11111(n)
222222(p)
33333333(:)
Я могу использовать обратную ссылку sed, чтобы поменять круглые скобки с такими цифрами:
sed -e 's/\([[:digit:]]*\)\((.*)\)/\2 \1/' file
, которые производят
(n) 11111
(p) 222222
(:) 33333333
Это круто!
Но с потенциальными десятичными цифрами все стало сложнее, например
11111(n)
11111.111(n)
2222222.22(p)
33.3333333(:)
Я пробовал много команд, например
sed -e 's/\([[:digit:]]*(\.[[:digit:]]*?)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*\.?[[:digit:]]*?)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*\.*[[:digit:]]*)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*.*[[:digit:]]*)\)\((.*)\)/\2 \1/' file
Выводтребуемый:
(n) 11111
(n) 11111.111
(p) 2222222.22
(:) 33.3333333
Обратите внимание, что цифры могут быть произвольной длины (от 1 до n цифр), а десятичные знаки (.) и десятичные цифры необязательны.
Кроме того, sed
don 'Кажется, у него есть \d
сокращение, как указано в stackexchange