Comment concaténer plusieurs lignes de sortie d'une ligne? [dupliquer]
cette question a déjà une réponse ici:
- Comment concaténer toutes les lignes d'un fichier en Bash? 8 réponses
si j'exécute la commande cat file | grep pattern
, j'obtiens de nombreuses lignes de sortie. Comment concaténer toutes les lignes en une seule ligne, remplaçant chaque "n"
avec "" "
(fin avec "
suivi de l'espace)?
cat file | grep pattern | xargs sed s/n/ /g
ne fonctionne pas pour moi.
7 réponses
utilisez tr '\n' ' '
pour traduire tous les caractères newline dans les espaces:
$ grep pattern file | tr '\n' ' '
Note: grep
lit des fichiers, cat
concatène des fichiers. Pas de cat file | grep
!
Edit:
tr
ne peut traiter que des traductions à caractère unique. Vous pouvez utiliser awk
pour changer le séparateur d'enregistrement de sortie comme:
$ grep pattern file | awk '{print}' ORS='" '
ce serait transform:
one
two
three
à:
one" two" three"
sortie de tuyauterie à xargs
concaténera chaque ligne de sortie à une seule ligne avec des espaces:
grep pattern file | xargs
ou toute commande, par exemple: ls | xargs
. La limite par défaut de la sortie xargs
est d'environ 4096 caractères, mais peut être augmentée par exemple. xargs -s 8192
.
En bash echo sans les guillemets supprimer les retours à la ligne, tabulations et les espaces multiples
echo $(cat file)
Cela pourrait être ce que vous voulez
cat file | grep pattern | paste -sd' '
en ce qui concerne votre édition, Je ne suis pas sûr de ce que cela signifie, Peut-être ceci?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(cela suppose que ~
ne se produit pas dans file
)
Voici la méthode utilisant ex
Editeur:
-
J dans toutes les lignes et p rint à la sortie standard:
$ ex +%j +%p -scq! file
-
J dans toutes les lignes en place (dans le fichier):
$ ex +%j -scwq file
Note: cela concaténera toutes les lignes à l'intérieur du fichier it-self!
probablement la meilleure façon de le faire est d'utiliser l'outil " awk "qui générera la sortie en une seule ligne
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
il va fusionner toutes les lignes en une seule avec délimiteur d'espace
il s'agit d'un exemple qui produit une sortie séparée par des virgules. Vous pouvez remplacer la virgule par le séparateur dont vous avez besoin.
cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD
produit:
1,2,3,4,5