sed -n '/,-,\.txt$/s|/[^/]*$||p' input.txt > output.txt
Что он делает:
Он читает строку за раз от input.txt
;-n
говорит, что по умолчанию не печатать строки.Для каждой строки, которая соответствует шаблону ,-,\.txt$
, все, состоящее из символа /
, за которым следует ноль или более не /
символов, до конца строки, удаляется (т. Е. Из последнего /
до конца строки);Я использую |
в качестве разделителя, поэтому мне не нужно избегать /
.
Это довольно прямолинейное исполнение ваших требований.
Теперь, когда вы разместили образецВвод и вывод, я вижу, что вы хотите сохранить окончательный /
(что не соответствует вашему требованию "удалить все с последнего /
до ,-,.txt
").Чтобы сделать это:
sed -n '/,-,\.txt$/s|/[^/]*$|/|p' input.txt > output.txt
Это дает ожидаемые результаты с учетом вашего образца ввода.
Если бы я делал это на лету, я мог бы использовать более простой подход, комбинируя sed
иgrep
:
grep ',-,\.txt$' input.txt | sed 's|/[^/]*$|/|' > output.txt