J'ai un projet Java qui a de nombreuses lignes qui ressemblent à ceci: J'ai besoin d'effectuer une recherche de bash pour ceci: p> J'ai essayé des choses comme ceci: p> Cependant, aucun de ceux-ci ne me donne ce que je veux, qui est toutes les chaînes uniques étant passées dans la méthode MyMethod . P> Alors, comment puis-je aller sur le remplacement ou le filtrage de la touche "$ \ n code> (citation fin-fin-fin de ligne) utilisant grep, awk et sed in Bash? < / p> p>
6 Réponses :
Essayez si cela fonctionne pour vous:
awk -F'"' '/^myMethod\(/,/\);$/{str = str " " $2}END{print str}' file
Quelque chose qui fonctionne exactement sur vos chaînes et vos formatage fournies (citations et symboles "+" inclus) ressemblerait à ceci:
>cat my_file.txt myMethod("some text here ..." + " ... more text here ..." + " ... and even more text here"); other lines and some other"); >sed -n '/myMethod/,/");/p' my_file.txt | sed -e ':a;N;$!ba;s/\n/ /g' -e "s/\"//g" -e "s/\+//g" -e "s/myMethod//g" (some text here ... ... more text here ... ... and even more text here);
J'ai essayé grep -rn "mymetthod" | xargs -i sed -n '/ mymethod /, / "); / p' {} | sed -e ': a; n; n; $! BA; S / \ N / / G' -E" S / \ "/ / G "-E" S / \ + // G "-E" S / MyMethod // g " code> mais cela n'a pas fonctionné.
Mais vous exécutez grep -rn "myMethod" code> au début de la commande et c'est une entrée pour les Xargs après le tuyau. Quelle est la raison de ce
grep code>? Qu'est-ce que vous appliquez le
grep code> sur. Vous avez besoin d'un fichier d'entrée.
J'utilise grep code> pour trouver toutes les classes de ma structure de projet utilisant
myMethod code>, puis supprimant le
"$ \ n code> afin que je puisse obtenir le méthode complète appeler sur une seule ligne.
Vous souhaitez donc modifier tout code> vos fichiers in situ, réécrire la méthode comme une seule ligne. Vous avez seulement mentionné que vous voulez que le contenu de votre méthode apporté à l'écran comme une seule ligne. Ou peut-être que j'ai mal compris ...
Est-ce ce que vous essayez de faire (à l'aide de GNU SED pour -z code> et de reconnaissance de
\ n code>)?
$ sed -z 's/"\n+ "//g' file
myMethod("some text here ... ... more text here ... and even more text here");
$ sed -z 's/"\n+ "//g' file | sed -n 's/^myMethod("\([^"]*\).*/\1/p'
some text here ... ... more text here ... and even more text here
Pas besoin d'autres outils; Cela peut être fait avec Bash seul.
$ s=$'myMethod("some text here ..."\n+ " ... more text here"\n+ " ... and even more text here");' $ echo "$s" myMethod("some text here ..." + " ... more text here" + " ... and even more text here"); $ t="${s//$'\n'/ }" $ t="${t//\" + \"/ }" $ t="${t#myMethod(\"}" $ t="${t%\");}" $ echo "$t" some text here ... ... more text here ... and even more text here
Je viens d'utiliser ces fragments de chaîne (par exemple, "un texte ici ...") À titre d'exemple. Le texte est censé être ce qui est dans le paramètre de méthode. Cela pourrait être n'importe quel texte.
@Brian, votre question a demandé comment faire cela dans Bash, alors j'ai fourni une solution bash. Comment vous obtenez un texte multiline dans une variable source est à vous de choisir. :) Vous pouvez bien sûr utiliser la substitution de modèle pour supprimer tout texte i> qui apparaît dans votre variable source, y compris myMethod (" code>.
@Brian .. D'accord, j'ai mis à jour mon exemple pour inclure une coupe supplémentaire de vos données source. Lisez sur l'expansion des paramètres.
Essayez ceci ( gnu grep code> et
gnu sed code>, je pense que vous les utilisez):
$ cat file
myMethod("some text here ..."
+ " ... more text here"
+ " ... and even more text here");
$ grep -rzn "myMethod" . | sed -rn '/myMethod/{:a;s/\)//;tb;N;ba;:b;s/\n//g;s/[^"]*$//;:c;s/^[^"]*"([^"]*)"(.*)/\2\1/;tc;p;}'
some text here ... ... more text here ... and even more text here
$ grep -rzn "myMethod" . | sed -rn '/myMethod/{:a;s/\)//;tb;N;ba;:b;s/\n//g;s/[^"]*$//;:c;s/^[^"]*"([^"]*)"(.*)/\2\1/;tc;s/^/"/;s/$/";/;p}'
"some text here ... ... more text here ... and even more text here";
Cela ira (localement dans le directeur actuel) via tous les fichiers qui ont une chaîne Veuillez noter que lorsque vous testez, vous devez éliminer le drapeau myMethod code> en eux, en lisant la méthode jusqu'à enfreindre le signal
); code> et le remplaçant par un Une doublure:
-i code> à partir du dernier
sed code>.
-i code> changera / réécrire vos fichiers instantanément, et vous ne le souhaitez pas avant de tester. p> p>
Pourriez-vous s'il vous plaît fournir un échantillon de la production attendue dans votre message et laissez-nous savoir.
@ Ravindersingh13 J'ai fait quand j'ai dit "J'ai besoin d'exécuter une recherche de bash pour ceci:" Quelqu'un texte ici ... ... plus de texte ici ... et encore plus de texte ici "; Essentiellement, le texte entre les deux parenthèses.
En voyant votre profil, vous avez appris que vous avez à peine une réponse comme une réponse correcte, donnez-la de temps en temps et lorsque vous voyez peu de réponses à votre message, essayez de sélectionner une réponse (qui convient le mieux à votre question). Vous pouvez aussi le faire pour vos questions précédentes (si vous pouvez appliquer), merci.
@ RavinderSingH13 Si vous vous souciez de regarder plus loin, vous verriez que je sélectionne très souvent une réponse comme bonne réponse. Je ne peux cependant pas faire cela, si aucune réponse n'est la bonne réponse.
Oui vrai, c'est pourquoi j'ai mentionné partout où il est applicable, pas de soucis. Continuez à partager et à apprendre de tellement, acclamations.
Vous avez utilisé
. Code>, cela signifie-t-il que de nombreux fichiers ont ce bloc code> myMethod code> que vous devez rechercher?
@Tiw Oui ... Je cherche récursivement à travers plusieurs répertoires pour les classes en utilisant cette méthode.