Quero adicionar o seguinte ao arquivo /etc/securetty
usando sed
:
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
Eu escrevi o seguinte comando para esse propósito:
sed -i '$a pts/0\\npts/1\\npts/2\\npts/3\\npts/4\\npts/5\\npts/6\\npts/7\\npts/8\\npts/9' /etc/securetty
o que me dá a saída:
pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9
Estou claramente perdendo alguma coisa aqui. O que poderia estar errado no meu sed
comando?
Responder1
Simplesconchaabordagem:
for i in {0..9}; do echo "pts/"$i; done >> /etc/securetty
>>
- para anexar a saída ao arquivo
>
- para direcionar a saída para o arquivo (sobrescrever)
Responder2
A propósito, se você quiser anexar aofimde um arquivo existente como este, você não precisa de sed nem de um shell loop. É apenas um comando:
$ printf '%s\n' "pts/"{0..10} >> /etc/securetty
Se você quiser inserir nocomeçodo arquivo você ainda pode fazer isso com printf:
$ cat file1
europe|EU
australia|AU
china|CN
$ printf '%s\n%s\n' "pts/"{0..10} "$(<file1)"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
pts/10
europe|EU
australia|AU
china|CN
Você pode substituir o conteúdo do seu arquivo /etc/securetty
assim (até sed -i
faz exatamente o mesmo trabalho nos bastidores):
$ printf '%s\n%s\n' "pts/"{0..10} "$(</etc/securetty)" > tmpsecure && mv -f tmpsecure /etc/securetty
Alternativa:
$ { printf '%s\n' "pts/"{0..10}; cat /etc/securetty; } > tmpsecure && mv -f tmpsecure /etc/securetty
# Or
# cat <(printf '%s\n' "pts/"{0..10}) /etc/securetty > tmpsecure && mv tmpsecure /etc/securetty
Responder3
Deveria ser:
sed -i 'a pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9' /etc/securetty
Alternativamente, você pode colocar o conteúdo em um arquivo e usar a read (r)
opção sed para anexar ao arquivo de destino.
Exemplo:
$ cat input.txt
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
$ cat /etc/securetty
This is a dummy file
Comando:
sed -i 'r input.txt' /etc/securetty
O arquivo /etc/securetty
é modificado conforme abaixo:
$ cat /etc/securetty
This is a dummy file
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9