-1
votes

Correspondre à une chaîne d'attendre des caractères spécifiques

J'ai donc essayé depuis un moment maintenant, pour correspondre à une chaîne, exclure ensuite un certain caractère de celui-ci.

Exemple: P>

INSERT INTO tags (created_at,


3 commentaires

Qu'attendez-vous de vous mettre à la fin?


Peut-être que s / ^ (. *?) \ S + \. (Tags). * / $ 1 $ 2 / ?


Probablement parce que a) votre question n'était pas claire et b) que vous n'avez montré aucun effort réel pour le résoudre vous-même. (Remarque: je n'étais pas le bownvoter - je devine juste)


3 Réponses :


0
votes

sed peut le faire facilement.

echo "INSERT INTO public.tags (created_at," | sed 's/tags//'


4 commentaires

Je ne veux pas me débarrasser des tags, je veux obtenir du public. qui vient avant les tags


sed 's / public //'


Le public n'est pas constant, en fait, le motif est 'xyz'.tags je veux me débarrasser de XYZ quelle que soit la valeur.


D'accord. Mais vous n'avez pas mis cela dans votre question. Créez une variable (i.e. myvar = "xyz" ), puis sous que dans la commande sed ( sed "S / $ $ myvar //" ). Assurez-vous simplement d'utiliser des guillemets doubles si vous utilisez une variable.



2
votes
s/\S+\.(?=tags\b)//

2 commentaires

Oui c'est ça, ce serait génial si vous l'expliquez. Merci :)


(? = ...) est appelé un lookahead en avant. Il vérifie si la position actuelle est suivie de la sous-cutée, mais sans avancer la position de correspondance du point de vue de l'extérieur de la parens.



2
votes

Votre question n'est pas très claire. Mais je pense que vous dites que vous avez: xxx pré>

et vous voulez vous retrouver avec: p> xxx pré>

Vous voulez supprimer le public. code> - mais cela pourrait être une chaîne suivie d'un point. P>

Ceci semble faire ce que vous voulez. p>

#!/usr/bin/perl

use strict;
use warnings;

my $sql = 'INSERT INTO public.tags (created_at,';

# Use s/.../.../ - the substitution operator.
# \S - match any non-whitespace character.
# + - match one or more of the previous atom.
# \. - match a dot.
# tags - match the string 'tags'
# \b - match the end of a word
# So match a string of non-whitespace characters,
# followed by '.tags' at the end of a word.
# Replace it with 'tags'.
$sql =~ s/\S+\.tags\b/tags/;

print $sql;


0 commentaires