Я не уверен, какая тайна цитирования стоит за этим, но если одинарные кавычки помогают с новой строкой, вы можете смешивать и сочетать с двойными кавычками для переменной:
sed 's/></>\
<'"$1/g"
РЕДАКТИРОВАТЬ:Я неправильно понял исходный вопрос, не увидев, что он использует почти правильный синтаксис 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
Думаю, это сработает,
sed 's?^\([[:alpha:]]\{1,\}\)[[:blank:]]\([[:alpha:]]\{1,\}\)?\2, \1?g'
Где,
?
(Вы можете заменить на /
, :
и т. д.)[:alpha:]
=[A-Za-z]
(Алфавитный)[:blank:]
=[\s\t]
(пробел и табуляция){1,}
\([[:alpha:]]\{1,\}\)
\([[: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
$ 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