Se eu executar o comando cat file | grep pattern
, recebo muitas linhas de saída. Como você concatena todas as linhas em uma linha, substituindo efetivamente cada uma "\n"
por "\" "
(finalize com "
seguido por espaço)?
cat file | grep pattern | xargs sed s/\n/ /g
não está funcionando para mim.
sed
script entre aspas simples para que o Bash não mexa com ele (já quesed s/\n/ /g
chamased
com dois argumentos, a saber,s/n/
e/g
); (2) desde que você quer a saída decat file | grep pattern
ser a entrada parased
, e não os argumentos parased
, você precisa eliminarxargs
; e (3) não há necessidadecat
aqui, poisgrep
pode usar um nome de arquivo como seu segundo argumento. Então, você deveria ter tentadogrep pattern file | sed 's/\n/ /g'
. (Neste caso, não teria funcionado, por razões dadas no link acima, mas agora você sabe o futuro.) #Respostas:
Use
tr '\n' ' '
para converter todos os caracteres de nova linha em espaços:Nota:
grep
lê arquivos,cat
concatena arquivos. Nãocat file | grep
!Editar:
tr
pode lidar apenas com traduções de caracteres únicos. Você pode usarawk
para alterar o separador de registros de saída como:Isso transformaria:
para:
fonte
echo ""
no final para adicionar nova linha antes do texto do prompt."
ele aparece comoone" two" three"
, no entanto, eu gostaria que ele aparecesseone" two" three
. Observe que os três últimos não têm parênteses. Alguma ideia?sed '$s/..$//'
para excluir os 2 últimos caracteres da última linha.--delete
opção, pois o padrão espera dois argumentos. por exemplotr --delete '\n'
.A saída da tubulação
xargs
concatenará cada linha de saída em uma única linha com espaços:Ou qualquer comando, por exemplo.
ls | xargs
. O limite padrão dexargs
saída é ~ 4096 caracteres, mas pode ser aumentado com, por exemplo.xargs -s 8192
.grep xargs
fonte
| tr '\n' ' '
não estava funcionando para mim quando chamado através daphp exec
função. Estava ignorando tr, e apenas dando a última partida do grep.| xargs
trabalhou.No bash
echo
sem aspas, remova retornos de carro, tabulações e vários espaçosfonte
IFS="$(printf '\n\t')"
echo $(<file)
... usar eco não é apenas mais puro do que usartr '\n' ' '
, mas também melhor (pense nos\r\n
finais das linhas). @aggsol você pode apenas dizerIFS=$'\n\t'
Pode ser o que você quer
Quanto à sua edição, não tenho certeza do que isso significa, talvez isso?
(isso pressupõe que
~
não ocorra emfile
)fonte
cat file
realmente serácat
, ou mesmo um arquivo. (Eu só deixou essa parte inalteradas como era irrelevante para a questão)Este é um exemplo que produz saída separada por vírgulas. Você pode substituir a vírgula por qualquer separador necessário.
produz:
fonte
Aqui está o método usando o
ex
editor (parte do Vim ):J oin todas as linhas e p rint para a saída padrão:
Em todas as linhas no local (no arquivo):
Nota: Isso concatenará todas as linhas dentro do próprio arquivo!
fonte
As maneiras mais rápidas e fáceis de solucionar esse problema:
Quando queremos substituir o novo caractere de linha
\n
pelo espaço :xargs
possui limites próprios no número de caracteres por linha e no número de todos os caracteres combinados, mas podemos aumentá-los. Detalhes podem ser encontrados executando este comando:xargs --show-limits
e, claro, no manual:man xargs
Quando queremos substituir um caractere por outro, exatamente um caractere :
Quando queremos substituir um caractere por muitos caracteres :
Primeiro, substituímos os caracteres de nova linha
\n
por til~
(ou escolhemos outro caractere exclusivo que não está presente no texto) e, em seguida, substituímos os caracteres de til por outros caracteres (many_characters
) e fazemos isso para cada til (sinalizadorg
).fonte
Provavelmente, a melhor maneira de fazer isso é usar a ferramenta 'awk', que gerará saída em uma linha
Ele mesclará todas as linhas em uma com delimitador de espaço
fonte
{print}
pois é a ação padrão do awk.Aqui está outro método simples usando
awk
:Além disso, se o seu arquivo tiver colunas, isso oferece uma maneira fácil de concatenar apenas determinadas colunas:
fonte
No red hat linux, eu apenas uso echo:
eco $ (cat / some / file / name)
Isso me fornece todos os registros de um arquivo em apenas uma linha.
fonte