Deve ser bastante simples com sed
:
sed 's;\([^/]*.launch$\);launch/;'
- Você pode agrupar o texto correspondente cercando a expressão entre colchetes (
\( ... \)
). Você precisa escapar dos parênteses para quesed
os veja como uma sintaxe especial. - Os grupos podem ser consultados usando a posição - o primeiro grupo é
, o segundo é
, etc.
Exemplo de saída:
$ sed 's;\([^/]*.launch\);launch/;' foo
/folder1/(abc)/launch/params.launch
/folder2/(efd)/launch/gui.launch
/folder3/(ghi)/launch/robot.launch
Isso é para expressões regulares básicas. Para expressões regulares estendidas, pode-se usar sed -r
, caso em que os parênteses não precisam ser escapados:
sed -r 's;([^/]*.launch);launch/;'
Por fim, em sed
e algumas outras ferramentas, o texto correspondente completo pode ser chamado de &
, evitando a necessidade de grupos e referências anteriores:
sed 's;[^/]*.launch;launch/&;' foo