com sed, pegue o próximo campo separado por barras e coloque-o no final:
sed -r 's,modules/([^/]*)/.*,& ,' file
Eu tenho um arquivo com 19k linhas como estas:
a96abbb5da0985983e113a9a7484c063 management/modules/membership/file1
d7f7dd7e3ede3e323fc0e09381f16caf management/modules/invoices/path/file2
No entanto, gostaria de acrescentar o nome do módulo no final da linha. Então o resultado seria:
a96abbb5da0985983e113a9a7484c063 management/modules/membership/file1 membership
d7f7dd7e3ede3e323fc0e09381f16caf management/modules/invoices/path/file2 invoices
Existe uma maneira de fazer isso com, por exemplo, sed
ou algo semelhante? De preferência sem um arquivo extra, usando -i
.
O nome do módulo sempre estaria no caminho neste formato: modules/MODULENAME
awk
solution.
$ awk -F/ '{print $0" "$3}' file
a96abbb5da0985983e113a9a7484c063 management/modules/membership/file1 membership
d7f7dd7e3ede3e323fc0e09381f16caf management/modules/invoices/path/file2 invoices
$
Se estiver usando o gnu awk, você pode usar o recurso inplace, em vez de ter que enviar para um segundo arquivo. por exemplo. awk -i inplace -F/ '{print $0" "$3}' file
Tente
sed -i 'h; s#^.*modules/# #; s#/.*$##; H; x; s#\n##;' file
Tags text-processing sed linux