1 votes

Alimentation en ligne des résultats du Shell Shell à l'aide de la commande grep.

Je suis en train d'écrire un Shell Shell pour grep quelque chose à partir d'un fichier journal et ensuite imprimer tous les résultats en utilisant echo commandement.

Je pourrais le faire, mais si le journal contient plus d'une occurrence de la chaîne de recherche, tous les résultats seront imprimés sur une seule ligne. Est-il possible d'imprimer les résultats avec un saut de ligne ; si j'exécute simplement la commande grep dans le Shell alors il imprimera avec un saut de ligne donc je pensais qu'avec Shell Shell aussi cela fonctionnera de la même manière mais clairement cela ne se produit pas.

Mes Shell Shell :

#!/bin/bash
messageStr='a senior leader of '$2
echo $messageStr
results=`grep "$messageStr" $1`
echo "results= " $results

Mon fichier journal :

A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women.

a senior leader of Aam Aadmi Party or AAP

A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women.

Résultats réels :

results=  A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women. a senior leader of Aam Aadmi Party or AAP

Résultats escomptés :

results=  A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women. 
a senior leader of Aam Aadmi Party or AAP

Veuillez me faire savoir si d'autres informations sont nécessaires.

1voto

Anthony Geoghegan Points 3521

Les variables non citées sont soumises à la division des mots (après le développement du paramètre Shell, les espaces, les tabulations et les caractères de nouvelle ligne sont utilisés pour diviser la variable développée en arguments séparés) et au globbing (développement des symboles de remplacement Shell). En règle générale, vous devez toujours double guillemet Shell. à moins que vous ne souhaitiez spécifiquement diviser les mots et/ou globbing. Pour plus d'informations, voir http://mywiki.wooledge.org/Quotes

Si je comprends bien votre question, dans ce cas, il vous suffit de citer le $results paramètre :

messageStr="a senior leader of $2"
echo "$messageStr"
results=$(grep "$messageStr" "$1")
echo "results=  $results"

Au fait, l'utilisation de back-ticks est (effectivement) dépréciée pour la substitution de commandes ; il est préférable d'utiliser $() .

Addendum : http://shellcheck.net/ fournit un retour d'information très utile lors du développement de Shell Shell (par exemple, la mise en évidence des variables non citées).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X