Usando sed
:
sed -r 's#^([0-9]+),([0-9]+)$#http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\.jpg,http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\.jpg#' input-file
- redireciona a saída para um novo arquivo
> output-file
; ou use a opção-i.bak
para fazer as alterações em seus locais e criar um arquivo de backup. -
-r
,--regexp-extended
- use expressões regulares estendidas no script. - o comando
s
significa substituto:#<string-or-regexp>#<replacement>#
. -
#
é usado como delimitador - geralmente/
desempenha esse papel, mas aqui temos muitas barras dentro do<replacement>
, portanto, não precisamos escapar de cada uma delas. -
^
corresponderá ao início da linha.$
corresponderá ao final da linha. -
[0-9]+
corresponderá a cada string que consiste em dígitos. - dentro do
<replacement>
, os grupos de captura([0-9]+)
serão tratados como as variáveise
.
-
\.
é apenas um escape do significado especial do ponto.
Aqui está uma simplificação proposta por @dessert :
sed -r 's#([0-9]+)#http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/\.jpg#g' input-file
- aqui, assumimos que o formato do arquivo é homogêneo, como no exemplo, e não precisamos corresponder à linha inteira.
- o sinal
g
(no final) repete a substituição de cada ocorrência da regex correspondida ao final da linha.
Além disso, é possível usar também variáveis para o URL base e para a extensão do arquivo:
URL='http://www.cs.bu.edu/~betke/research/vc-crowd/MSCOCO/'; EXT='.jpg'
sed -r "s#([0-9]+)#$URL$EXT#g" input-file
- Nota: aqui são usadas aspas duplas.