Script shell pour la recherche de chaînes entre des lignes particulières, horodatages

J’ai un fichier avec plus de 10000 lignes. J’essaie de rechercher une chaîne entre un ensemble particulier de lignes, entre 2 horodatages.

J’utilise la commande sed pour y parvenir.

sed -n ‘1,4133p’ nom_fichier | sed -n ‘/’ 2015-08-12 ‘/, /’ 2015-09-12 ‘/ p’ nom_fichier | grep -i “ssortingng”

Avec la commande ci-dessus, j’obtiens le résultat souhaité. La commande ci-dessus considère le fichier entier pas les lignes que j’ai spécifiées.

Est-il possible d’y parvenir?

S’il vous plaît aider

Je pense que le problème est ici:

 sed -n '1,4133p' filename | sed -n '/'2015-08-12'/, /'2015-09-12'/p' filename | ^^^ 

Vous souhaitez canaliser la sortie de votre première commande sed dans la seconde. De la manière dont vous avez ceci, la sortie du premier est détruite et remplacée par une nouvelle parsing du fichier.

Essaye ça:

 sed -n '1,4133p' filename | sed -n '/'2015-08-12'/, /'2015-09-12'/p' | grep -i "ssortingng" 

Chaque fois que vous vous retrouvez à enchaîner des pipes de seds et de greps, utilisez simplement 1 commande awk à la place:

 awk -v IGNORECASE=1 '/2015-08-12/{f=1} f&&/ssortingng/; /2015-09-12/||(NR==4133){exit}' file 

Ce qui précède utilise GNU awk pour IGNORECASE , avec d’autres awks, vous devez simplement changer /ssortingng/ to tolower($0)~/ssortingng/ .