Вот улучшенные ответы с awk
и sed
.
В отличие от других ответов, они работают независимо от того, какой путь 'Filename:'. То есть, если вы измените «./debs/» на «./myDebs/», он все равно будет работать. Все, что им требуется, это то, что файл .deb находится в конце пути
Сед
sed '/Filename:/s|^\(.*/\)\([^\.]*\)\..*$|\1download.php?p=\2|' ./infile
AWK
awk -F'/' '/Filename:/{split($NF,a,".");$NF="download.php?p=" a[1]}1' OFS='/' ./infile
Input
$ cat ./infile
Package: com.xyz.abc
Version: 1.0
Filename: ./debs/abc.deb
Package: com.xyz.def
Version: 1.0.0-1
Filename: ./MyDebs/def.deb
sed Выход
$ sed '/Filename:/s|^\(.*/\)\([^\.]*\)\..*$|\1download.php?p=\2|' ./infile
Package: com.xyz.abc
Version: 1.0
Filename: ./debs/download.php?p=abc
Package: com.xyz.def
Version: 1.0.0-1
Filename: ./MyDebs/download.php?p=def
awk Вывод
$ awk -F'/' '/Filename:/{split($NF,a,".");$NF="download.php?p=" a[1]}1' OFS='/' ./infile
Package: com.xyz.abc
Version: 1.0
Filename: ./debs/download.php?p=abc
Package: com.xyz.def
Version: 1.0.0-1
Filename: ./MyDebs/download.php?p=def