Как переключить имя с фамилией в этой ситуации?

Я не уверен, какая тайна цитирования стоит за этим, но если одинарные кавычки помогают с новой строкой, вы можете смешивать и сочетать с двойными кавычками для переменной:

sed 's/></>\
<'"$1/g"
1
12.01.2019, 17:15
3 ответа

РЕДАКТИРОВАТЬ:Я неправильно понял исходный вопрос, не увидев, что он использует почти правильный синтаксис BRE. Тем не менее...

У вашего регулярного выражения есть проблемы:

  • Во второй группе захвата отсутствует[(хотя это, вероятно, просто проблема с транскрипцией, поскольку вы опубликовали некоторый вывод, который вы не смогли бы получить без этого[).
  • Чтобы сопоставить только второе слово с вашей второй группой захвата, вы, вероятно, захотите сопоставить последний символ перед первым двоеточием -, т. е. вы хотите исключить :из своей второй группы захвата.
  • Вам не нужен окончательный флаг g, так как вас интересует только первое совпадение. Если вы включите его, sedпопытается сопоставить ваше выражение и с остальной частью строки, возможно, зашифровав его.

В качестве примечания :поскольку вы указываете sedтолько два аргумента опции, отличной от -, опция -eне нужна;первый аргумент опции, отличный от -, будет принят в качестве скрипта для интерпретации.

Модифицированная версия вашей команды:

sed -e "s/\([^ ]*\) *\([^ :]*\)/\2, \1/"

(Я удалил пробел после обратной ссылки \1и добавил запятую после \2, чтобы она соответствовала представленному вами образцу вывода ).
Результат, который он дает при применении к исходному тексту:

$ echo "Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900" |
sed -e "s/\([^ ]*\) *\([^ :]*\)/\2, \1/"
Tranh, Vinh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
1
27.01.2020, 23:42

Думаю, это сработает,

sed 's?^\([[:alpha:]]\{1,\}\)[[:blank:]]\([[:alpha:]]\{1,\}\)?\2, \1?g'

Где,

  • Разделитель SED ->?(Вы можете заменить на /, :и т. д.)
  • Класс POSIX -> [:alpha:]=[A-Za-z](Алфавитный)
  • Класс POSIX -> [:blank:]=[\s\t](пробел и табуляция)
  • Хотя бы один или несколько ->{1,}
  • 1-я группа ->\([[:alpha:]]\{1,\}\)
  • 2-я группа ->\([[:alpha:]]\{1,\}\)

[arif@arif test]$ echo "Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900" | sed 's?^\([[:alpha:]]\{1,\}\)[[:blank:]]\([[:alpha:]]\{1,\}\)?\2, \1?'
Tranh, Vinh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
0
27.01.2020, 23:42
$ echo "Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900"| sed 's/:/ /1'| awk '{$30=$1;$1=$2;$2=$30;print $0}'| sed "s/ /,/1"| sed "s/ /:/1"
Tranh,Vinh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900                      Vinh
0
27.01.2020, 23:42

Теги

Похожие вопросы