2015-07-09 2 views
0

У меня есть много путей в одном файле, и мне нужно изменить пути со специальной строкой, если есть .jpg, .pdf Например: У меня есть прямые линии, такие как:Замените полный путь одной строкой, если

images/2015/somename.jpg 
images/2012/somefile.pdf 

2015/2012 может быть 1997 или 2010 г. и т. Д. - номера случайного года. Я хотел бы изменить эти строки с СЭД (если это возможно), как этот

images/somename.jpg 
files/somefile.pdf 

Я попытался, как так: echo "images/2015/image12345.jpg" | sed 's/images[^0-9]*[^0-9]/\/images/;' - никакого результата

Или, может быть, AWK будет хорошим инструментом для этой работы?

+0

Почему вы соглашаетесь на не-номера, когда ваши средние компоненты являются всеми числами? –

+0

Я просто попробовал что-то, чтобы заставить его работать. Я плохо разбираюсь в sed - извините – Jaur

+0

Вы хотите совместить и удалить '/ ####', чтобы соответствовать этому. –

ответ

0
$ cat file 
images/2015/somename.c 
images/123/somename.jpg 
1234/2015/somename.jpg 
images/2015/somename.jpg 
images/2012/somefile.pdf 

$ awk '/\.(jpg|pdf)$/ {sub("/[0-9]{4}/","/")} 1' file 
images/2015/somename.c 
images/123/somename.jpg 
1234/somename.jpg 
images/somename.jpg 
images/somefile.pdf 
+0

Извините, я не понимаю ... – Jaur

+1

Эд Мортон, я получил его сейчас - спасибо! Теперь я должен настроить его, чтобы он работал по мере необходимости. – Jaur

0

С ГНУ-СЭД: sed -r '/\.(jpg|pdf)$/s#/[0-9]+/#/#'

/\.(jpg|pdf)$/: Соответствует линии, оканчивающиеся .jpg или .pdf

/[0-9]+/: Соответствует любой последовательности только цифры между косой черты

Пример:

$ echo "images/2015/image12345.jpg" | sed -r '/\.(jpg|pdf)$/s#/[0-9]+/#/#' 
images/image12345.jpg 
Смежные вопросы