2017-06-06 4 views
0

Je souhaite obtenir les lignes contenant "myString" dans le fichier "1.txt" et enregistrer le résultat dans "2.txt". Donc, je vous écris ces derniers dans un fichier bash:Impossible d'obtenir le résultat complet lorsque "grep file"

#!/bin/sh 
grep "myString" 1.txt > 2.txt 

Mais je ne suis moitié du « 1.txt » rassemblés de, il est arrêté avec un résultat incomplet dans « 2.txt ». L'utilisation de la commande commond au lieu du fichier bash n'a pas aidé. Je le fais avec cygwin64 sur windows7.

Y a-t-il un terminateur qui arrêterait la commande "grep", ou une limite de taille sur Windows7, ou autre chose?

Merci beaucoup.

+1

ajoutez un exemple de fichier d'entrée et montrez le fichier de sortie que vous avez obtenu en utilisant ce script ... aussi, si vous voulez un script bash, utilisez '#!/Bin/bash' – Sundeep

+0

@Sundeep Merci pour le conseil. Je l'ai changé en "bash", mais cela n'a pas aidé .. Ce n'est pas arrivé à tous les fichiers, la plupart du temps cela a bien marché. Le fichier n'a pas pu être téléchargé car il s'agit d'un fichier d'entreprise :) Peut-être était-ce à cause de certains caractères chinois? Je voudrais l'essayer sur un linux pour voir si cela fonctionnerait. – dif

+0

J'aurais dû donner le lien avant lui-même .. https://stackoverflow.com/help/mcve l'idée est de trouver un moyen de reproduire le problème aussi peu que possible .. créer des fichiers d'échantillons vous-même et voir si vous pouvez répliquer le problème vu avec votre utilisation réelle ... alors il serait plus facile de repérer le problème – Sundeep

Répondre

1

En raison de certains caractères chinois, le fichier a été reconnu en tant que fichier binaire.

Ce serait bien avec "-a".

Cela a également fonctionné très bien sur Linux, avec ou sans "-a".

Ainsi, windows7 ou cygwin y ont également participé.

Merci à @Sundeep pour l'aide.

+0

Ce n'est pas une question de Cygwin vs Linux. C'est affaire de fichier enconding et LANG utilisé pour votre système. Si LANG est '* .UTF-8' et que le fichier est dans un codage différent, grep pourrait correspondre à une séquence d'octets non valide dans UTF-8 et suppose que le fichier est binaire. Utilisez 'file ' pour identifier l'encodage. – matzeri

+0

Oui, le fichier est un "texte ASCII étendu non ISO, avec des lignes très longues, avec des terminaisons de ligne LF, NEL". Mais cela fonctionnait bien sur Linux sans "-a", alors que "-a" était nécessaire sous Windows ... devrait-il s'agir d'un système d'exploitation? – dif

+0

Je doute que la version 'locale' et/ou' grep' soit la même entre Linux et Cygwin que vous utilisez. – matzeri