Si je fais:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Si je veux lister .rar
uniquement les fichiers et que j'utilise grep , les .rar.part
fichiers seront également affichés , ce qui n'est pas mon souhait.
Je résous ceci en utilisant find
ou ls **/*.rar
comme dit dans ce fil et ils fonctionnent bien, mais je voudrais savoir s'il est possible de le faire via grep
.
J'ai essayé (en pensant à EOL
):
ls -R | grep ".rar\n"
sans résultat.
Je pense que le problème réside dans le fait de savoir si le greping se trouve au bout de la ligne , mais je ne suis pas sûr.
Toute aide ici, s'il vous plaît?
grep
dans ce cas? Pourquoi ne pasfind
?find
commande est en conflit avec celle de Windows) et ... apprentissage ;-). La question ne concerne pas "Répertorier les fichiers dans un répertoire" (il ne s'agit que d'un exemple personnalisé), mais plutôt "Comprendre l'utilisation de la commande grep"ls -1R
.grep
. Voir ma réponse.-1R
commutateur? Apparemment, les résultats sont les mêmes.Réponses:
L'
$
ancre correspond à la fin d'une ligne.Vous pouvez également utiliser
find
pour cela:la source
En plus de votre question, veuillez noter que
.rar
cela ne correspond pas seulement à ".rar" mais à chaque caractère (y compris.
) précédant lerar
. Dans ce cas, probablement pas un problème mais.
doit être échappé dans les expressions rationnelles.la source
.asc
c'est comme*asc
motif? Donc, ça va correspondre, par exemplewhereverasc
,.xrar
.Vous pouvez également demander
grep
à rechercher votre chaîne en partant d'une limite de mot. A.
est l'une de ces limites.Exemple
Disons que j'ai cet exemple de données.
Cette commande ne trouverait que le fichier avec l'
.rar
extension.Comment ça marche?
Situations où cela ne fonctionnera pas
Si vous avez des fichiers nommés,
blah-rar
ceux-ci seront également détectés.En effet, les caractères autres que les caractères alphanumériques sont généralement considérés comme des caractères limites et passeraient donc au-delà de cette approche.
la source
"
au lieu de simples guillemets?.rar
. Mais ce ne sera pas un problème avec l'utilisation dels -R
. Seulement si vous utilisez par hasardls -Ra
.-P
passage àgrep
dans mon exemple. Cela déclenche une interprétation PCRE de l'argument.\n
) qui est un caractère légal. Lels -1R
forcera les fichiers à être affichés dans une seule colonne indépendamment.Il suffit de faire:
Tu n'as pas besoin
grep
du tout.NOTE: Ce qui précède fonctionne ... sauf que ça reste au moins
afile-rar
et je ne comprends pas pourquoi. Je vais le laisser ici, mais je n'en suis pas fier. En tout cas, comme d'autres l'ont dit:la source
xrar
ouafile-rar
.afile-rar
etxrar
sont toujours inclus dans la sortie. Aucun changement avec vos derniers mods non plus. Problème Pesky non? C'est amusant d'essayer de le résoudre sans les méthodes habituelles 8-)-dash
passe. Laxrar
chose que je pourrais gérer, mais pas le-dash.
je ne comprends pas le-dash.
Utilisez des guillemets simples pour que $ fonctionne comme fin de ligne. Si vous voulez aussi grep avec une variable, utilisez la combinaison de guillemets simples et doubles comme ci-dessous:
Mon post précédent a été supprimé en disant qu'il est en double. Laissez-moi vous expliquer en quoi c'est différent.
Les autres publications mentionnent soit l'utilisation complète de doubles guillemets
""
, soit l'utilisation complète de simples guillemets''
. Ils ont tous deux leurs propres limites. La suite l'explique.Le problème avec tous les guillemets est le suivant:
grep "pattern$"
donne l'erreur suivante:Illegal variable name.
Et utiliser tous les guillemets simples fonctionne, mais si vous souhaitez une substitution de variable, tous les guillemets simples ne fonctionneront pas . Par exemple:
Si j'ai une chaîne
A_BOOK
, y compris d'autres chaînes dans un fichier FILE.Si je mets le livre à une variable BK
Si je grep avec toutes les guillemets doubles, j'obtiens le message d'erreur suivant
grep "${BK}$" FILE*
:: 1er $ pour substitution de variable, 2e pour fin de modèle ( nom de variable illégal ).Si je grep avec tous les guillemets simples, la substitution de variable ne se produit pas.
grep '${BK}$' FILE
ne renvoie rienSi j'utilise une combinaison de guillemets simples et doubles, j'obtiens ce que j'attends. Les guillemets doubles pour la substitution de variables et les guillemets simples pour la fin du modèle.
la source
"foo$"
syntaxe fonctionne bien sur sh et sa famille.Si après avoir suivi ce qui précède et que rien ne fonctionne, cela peut être dû à des fins de ligne. Pour réparer, faites:
dos2unix pr0n.txt
etgrep
recommencez.la source