J'essaie de trouver le nombre de fois qu'une chaîne est répétée dans un fichier, dans le même temps, je dois la stocker dans une variable.
Quand j'utilise la commande ( nom de fichier de chat | grep -c '123456789' code>), il affiche le nombre correctement, mais lorsque j'utilise la commande ci-dessous, il affiche la commande non trouvée. p>
var =$(cat filename | grep -c '123456789')
echo $var
3 Réponses :
N'utilisez pas d'espaces autour du panneau lu au moins le BASH PROG INTRO HOWTO P> Mais vous avez une utilisation inutile de = code>:
CAT CODE> SO CODE simplement p>
Utiliser les backuotes fonctionnera également:
$ pwd /home/user99 $ cur_dir=`pwd` $ echo $cur_dir /home/user99
Cela fonctionne parce que vous avez supprimé l'espace avant le = code>; Vous auriez pu garder le
$ ( code> ...
) code> notation (plus lisible et nitable i>) au lieu des backquotes
@ Levon: N'est-il pas nécessaire d'utiliser $ symbole dans la commande ci-dessus?
@JackieJames Pas nécessaire, la commande fonctionne comme indiqué, vous pouvez utiliser les backquotes à la place. J'ai utilisé cela à la fois avec Bash et le TCSH. Avez-vous rencontré des problèmes d'essayer cela?
@ Levon: varexe = (nom de fichier de chat | grep -c code> 123456789 ') `echo $ varx il n'imprime rien.
@Jackiejames pouvez-vous copier directement à partir de ma réponse (j'ai testé ceci, à l'aide d'une chaîne de fichier et de grep différente). Ce que vous venez de poster semble manquer la principale backquote, la citation unique devant le 1234, et il semble que vous ayez une place après le = code> ... laissez-moi savoir
varexe = (nom de fichier de chat | grep -c code> 123456789 ') `echo $ varx ./count1.sh: ligne 1: EOF inattendu en recherchant une correspondance`' './count1.sh: Ligne 3: Erreur de syntaxe: fin de fichier inattendu
@JackieJames Désolé, je ne peux pas expliquer pourquoi cela ne fonctionne pas pour vous et que je pense que vos messages sont en train de se mettre en forme avec le formatage de sorte qu'il est difficile pour moi de savoir ce qui est saisi exactement. Je viens de poster un autre exemple (celles-ci sont toutes coupées et pâtes d'une coque UNIX).
N'oubliez pas que GREP peut lire le fichier directement. Vous pouvez éviter Dans l'exemple de votre question, la commande ou si vous utilisez bash: p> ou (pour l'exhaustivité) dans csh / TCSH: P> setenv var `grep -c '123456789' filename`
Cela fonctionne bien depuis parce que je saisis directement les données. déclarer -a Arr arr = ($ (awk '/ 123456789 / {impression nr}' Nom de fichier)) echo $ {arr [0]} echo $ {arr []} bt quand je fais comme ci-dessous, ça ne fait pas " t Travaux. Pouvez-vous me faire savoir comment le paramètre 'NAME' peut être utilisé INT Commande ci-dessous: echo Entrez votre recherche de recherche: Lire le nom Déclarez -Ar arr = ($ (AWK '/ "$ nom" / {imprimé nr}' FileName) echo $ {arr [0]} echo $ {arr [ i>]}
Il est difficile de comprendre ce que vous demandez en fonction de ce commentaire, éventuellement dû au désordre effectué par le formatage de SO. Si vous devez ajouter plus de détails à votre question, veuillez cliquer sur le modifier le lien sous la question, apportez vos modifications, et je 'll mettre à jour ma réponse en conséquence.
Avez-vous besoin des citations simples autour de votre chaîne de recherche pour Grep?
@Levon, citations simples autour de la regex for Grep ne serait requise que si la regex contient des caractères qui seraient interprétés par la coquille, comme
$ code> ou
[ code> ou
ou
ou
ou
ou
ou
ou
ou code> code>. Comme une très simple regex ne contenant aucun caractère spécial,
123456789 code> n'a pas besoin d'être cité.