Digamos que eu tenho uma variável de shell $string
que contém algum texto com várias novas linhas, por exemplo:
string="this
is
a test"
Gostaria de converter essa string em uma nova string, new_string
onde todas as quebras de linha são convertidas em espaços:
new_string="this is a test"
Eu tentei:
print $string | sed 's/\n/ /g'
mas não funcionou
Também estou querendo saber se existe uma maneira de fazer isso usando perl -0777 's/\n/ /g'
ou talvez o comando tr
?
Respostas:
Se você deseja remover apenas as novas linhas da string, não precisa usá-lo
sed
. Você pode usar apenascomo outros haviam apontado.
Mas se você quiser converter novas linhas em espaços em um arquivo usando
sed
, poderá usar:ou até
awk
:fonte
sponge
é um utilitário útil para substituir um arquivo de entrada. Faz parte do pacotemoreutils
... por exemplo.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Você pode tentar usar
tr
:fonte
Outra opção seria usar
xargs
(que, além disso, comprime vários espaços em branco):fonte
O eco ignora o espaço em branco, portanto deve funcionar:
fonte
Se você já tem a corda como uma variável bash, como o seu exemplo mostra, é inútil e desperdício de recursos (e mais digitação) para chamar
sed
,awk
,printf
, etc ... Você pode apenas usar a expansão de variáveis do bash :Você nem precisa redesigná-lo. Você pode usar a expansão como está e deixar
$string
inalterada.fonte
Você também pode tentar este comando awk,
Exemplo:
fonte
Isso converte qualquer sequência de um ou mais
\n
caracteres ewline que ocorrem na variável do shell$string
em uma única<space>
.fonte
Você pode usar o comando sed simples
fonte