Com BSD sed
ou versões recentes do GNU sed
(para versões mais antigas, substitua -E
por -r
):
sed -E 's#(.*\src).*(\[^\]+\[^\]+$)##' file.txt
-
#
é usado como o comando delimitador para substituição (s
) desed
, para evitar ambigüidade envolvendo\
s na entrada -
(.*\src)
corresponde asrc
do início e coloca a correspondência no grupo capturado 1 -
(\[^\]+\[^\]+$)
corresponde à parte que tem dois\
s até o final e coloca no grupo capturado 2, o.*
anterior a isso corresponde a tudo entre o primeiro e o segundo grupos capturados -
Na substituição, usamos os dois grupos capturados
POSIX-ly:
sed 's#\(.*\src\).*\(\[^\]\+\[^\]\+$\)##' file.txt
Exemplo:
% cat file.txt
..\..\src\modules\core\abc\abc.cpp
..\..\src\modules\core\something\xyz\xyz.cpp
..\..\src\other_modules\new_core\something\pqr\pqr.cpp
..\..\src\other_modules\new_core\something\pqr\abc.cpp
% sed -E 's#(.*\src).*(\[^\]+\[^\]+$)##' file.txt
..\..\src\abc\abc.cpp
..\..\src\xyz\xyz.cpp
..\..\src\pqr\pqr.cpp
..\..\src\pqr\abc.cpp