Substituindo cada linha inteira por $newLineCont
se o primeiro campo delimitado por espaço em branco for igual a $cont
:
awk -v c="$cont" -v nc="$newLineCont" '$1 == c { $0 = nc } 1' <infile >outfile
Isso lerá a partir de infile
e criará um novo arquivo chamado outfile
. Se o primeiro campo de uma linha for igual a $cont
, toda a linha será substituída por $newLinecont
.
O trailing 1
é uma maneira curta de escrever { print }
e fará com que todas as linhas sejam exibidas.
Analisando Stéphane Chazelas abaixo em conta (nos casos em que uma ou ambas as variáveis contiverem barras invertidas):
env c="$cont" nc="$newLineCont" awk '$1 == ENVIRON["c"] { $0 = ENVIRON["nc"] } 1' <infile >outfile
Usando sed
:
sed "s/^$cont[^0-9].*/$newLineCont/" <infile >outfile
Com sed
, precisamos ter mais cuidado para corresponder à coisa correta sem a expressão regular. Se $cont
for 12
, não queremos corresponder as linhas que começam com 123
. É por isso que coincidi explicitamente com um não-dígito depois de $cont
com [^0-9]
(suponho que $cont
seja um número).
Assim como o comando awk
, ele lê infile
e grava em outfile
.
Se $cont
ou $newLineCont
contiver barras, elas precisarão ter escape como \/
, e se $cont
contiver qualquer outro caractere especial em expressões regulares, elas também precisarão ser escapadas corretamente.