Awk 如果需要,请用一个字符串替换完整路径

Awk 如果需要,请用一个字符串替换完整路径,awk,sed,Awk,Sed,我在一个文件中有很多路径,如果有.jpg、.pdf,我需要使用特定字符串更改路径 例如: 我现在有这样的台词: images/2015/somename.jpg images/2012/somefile.pdf 2015/2012年可能是1997年或2010年等-随机年份数。 我想用sed(如果可能的话)这样更改这些行 images/somename.jpg files/somefile.pdf 我这样试过: echo“images/2015/image12345.jpg”| sed的/im

我在一个文件中有很多路径,如果有.jpg、.pdf,我需要使用特定字符串更改路径 例如: 我现在有这样的台词:

images/2015/somename.jpg
images/2012/somefile.pdf
2015/2012年可能是1997年或2010年等-随机年份数。 我想用sed(如果可能的话)这样更改这些行

images/somename.jpg
files/somefile.pdf
我这样试过:
echo“images/2015/image12345.jpg”| sed的/images[^0-9]*[^0-9]/\/images/;'-无结果


或者也许awk将是这项工作的好工具?

使用gnu sed:
sed-r'/\(jpg | pdf)$/s#/[0-9]+/#/#'

$ 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
/\(jpg | pdf)$/
:匹配以
.jpg
.pdf
结尾的行

/[0-9]+/
:匹配斜杠之间的任意数字序列

例如:

$ echo "images/2015/image12345.jpg" | sed -r '/\.(jpg|pdf)$/s#/[0-9]+/#/#'
images/image12345.jpg

当中间的组件内容都是数字时,为什么要在非数字上进行匹配?我只是尝试了一些方法来让它工作。我不擅长sed-对不起,你想匹配并删除
/#####
,所以匹配它。Ed Morton,我现在就知道了-谢谢!现在,我必须调整它,使其根据需要工作。