Альтернативные решения:
С помощью GNU grep
и paste
grep
извлекает два шаблона . * \\ src
или ( \\ [^ \] +) {2} $
и печатает их на отдельных строках. Затем вывод объединяется с помощью paste
$ grep -oE '.*\\src|(\\[^\]+){2}$' ip.txt | paste -d '' - -
..\..\src\abc\abc.cpp
..\..\src\xyz\xyz.cpp
..\..\src\pqr\pqr.cpp
..\..\src\pqr\abc.cpp
с perl
$ perl -pe 's/.*\\src\K.*(?=(\\[^\\]+){2}$)//' ip.txt
..\..\src\abc\abc.cpp
..\..\src\xyz\xyz.cpp
..\..\src\pqr\pqr.cpp
..\..\src\pqr\abc.cpp
Здесь текст между шаблонами . * \\ src
и (\\ [^ \\] +) {2} $
удаляется путем использования положительных поисковых запросов