Я пытался использовать sed в последнее время, чтобы сгенерировать кучу методов из разделяемых разделяемых запятой и новой линией элементов перечисления. Я побежал в следующем поведение, которое кажется неинтуитивным:Почему sed соответствует чему-то вне группы в составе группы?
$ echo 'Hello,' | sed 's/\(.*\),\?/"Hi \1!"/g'
"Hi Hello,!"
Здесь я пытаюсь захватить все до запятой в группу с помощью \(.*\)
, то я позволяю опциональную запятую ,\?
. Я ожидал, что это заменит \1
всем до первой запятой, а именно Hello
, но по какой-то причине запятая также включается в замещение, хотя она не находится внутри группы. Почему это так?
Спасибо за ответы. Запятая в конце должна быть необязательной, потому что я пытаюсь совместить с членами перечисления, а последний не имеет конечной запятой. –