Comando da linha de comandos para anexar espaço em branco ao jogo regex

1

Eu quero adicionar espaço em branco a cada correspondência de um padrão de expressão regular encontrado em um arquivo de texto.

Exemplo:

xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf

Quero corresponder "1 -2" ou "2 - 4". Eu criei este padrão:

[0-9]\s-\s[0-9]

Agora eu gostaria de acrescentar um espaço em branco a cada partida, assim:

xadsfa 1 - 2  --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4  --- --- --- asdf
    
por Nicolai Schmid 19.09.2016 / 17:22

1 resposta

2

Isso é trivial com uma ferramenta como sed :

$ sed 's/[0-9]\s-\s[0-9]/& /' file
xadsfa 1 - 2  --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4  --- --- --- asdf

O operador s/foo/bar/ substituirá a primeira ocorrência de foo por bar em cada linha do arquivo de entrada. Se você quiser combinar todos casos em uma determinada linha, use g : s/foo/bar/g . O & é "o que quer que tenha sido correspondido", por isso s/[0-9]\s-\s[0-9]/& / substituirá a primeira correspondência da sua regex com o que tiver correspondido mais um único espaço.

Observe que, se você está combinando apenas um único espaço (não as guias ou outro espaço em branco), não há motivo para usar \s . Apenas use espaços:

sed 's/[0-9] - [0-9]/& /' file

Finalmente, para fazer as alterações no próprio arquivo, use -i (isso pressupõe o GNU sed , a sintaxe é ligeiramente diferente em outras implementações; também, isso substituirá o arquivo pelo resultado da operação sed. Certifique-se de fazer o que você precisa antes de adicionar -i ):

sed -i 's/[0-9] - [0-9]/& /' file
    
por 19.09.2016 / 17:30