Je veux diviser une réponse HTTP de fichier en deux fichiers: on ne contenant que des en-têtes HTTP et une contaminer le corps d'un message. Pour cela, j'ai besoin de diviser un fichier en deux première ligne vide (ou pour des outils UNIX sur la première ligne contenant uniquement le caractère CR = ' Comment faire cela sous une manière portable (par exemple en utilisant \ r code>') en utilisant un script shell strong> . p>
4 Réponses :
$ cat test.txt a b c d e f $ sed '/^$/q' test.txt a b c $ sed '1,/^$/d' test.txt d e f Change the /^$/ to /^\s*$/ if you expect there may be whitespace on the blank line.
Il devrait probablement être / ^ \ r $ / code> (ou juste au cas où
/ ^ \ r? $ / Code>)
En cas d'utilisation / ^ \ r? $ / Il doit également être utilisé.
étant donné le script AWK awk -f foo.awk
en-têtes code> et
et
corps code> pour vous. p> p>
Vous pouvez extraire la première partie de votre fichier (en-têtes HTTP) avec: et la deuxième partie (corps http) avec: p>
Vous pouvez utiliser ou p> (supposant le contenu du "nom de fichier" sont identiques que la sortie de l'écho) créerait, dans ce cas, deux fichiers nommés "xx00" et "xx01". Le préfixe peut être changé de "xx" en "Outfile", par exemple, avec Pour diviser un fichier à chaque ligne vide, vous pouvez utiliser: p> csplit code>:
-f outfile code> et le nombre de chiffres dans le nom de fichier pourrait être modifié en 3 avec
-n 3 code>. Vous pouvez utiliser une regex plus complexe si vous devez faire face aux terminaisons de ligne Macintosh. P>
'{*}' code> provoque la répétition du modèle précédent autant de fois que possible. p> p>
+1 Vous pouvez également l'utiliser pour diviser le fichier en plus de 2 parties.
Pouvez-vous le faire directement à un tableau dans Bash, plutôt que de créer des fichiers?
@Zacthompson: J'ai édité la réponse pour l'énoncer, mais jusqu'à ce qu'il soit révisé: vous pouvez ajouter '{*}' code> à la fin de la commande ci-dessus pour scinder plusieurs fois. par exemple.
nom de fichier CSplit '/ ^ $ /' '{*}' code>
Cela ne fonctionne pas lorsque la ligne "vide" contient un seul CR (comme spécifié dans la question) - CSplit dit "Match non trouvé"
@Chad: Vous pouvez modifier la spécification au $ '/ ^ \ r $ /' code>