J'ai une requête simple liée à la sélection et au remplacement de texte sous Linux. J'utilise la commande sed
. J'ai le texte suivant:
bonjour tout le monde, je ne suis qu'un simple texte à afficher.
Maintenant, je veux imprimer sur "hello world" seulement je peux le faire en utilisant la commande suivante sous linux.
echo "hello world, I am just simple text for display." | sed 's/, I am.*//g'
Maintenant, je veux totalement l'inverse de cette fonction, comment puis-je supprimer "hello world" en utilisant une commande simple, tout comme sed
.
Sortie requise:
, Je ne suis qu'un simple texte à afficher.
Je préférerais que les commandes linux (sed
etc) soient utilisées.
Pour inverser l'effet de votre commande ET conserver la même partie de la chaîne à faire correspondre (en supposant qu'il s'agit de la seule partie fixe de la chaîne et que vous souhaitez supprimer toute autre partie pouvant varier), vous pouvez procéder comme suit:
echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g'
Résultat :
, I am just simple text for display
Que fait l'expression régulière:
De cette façon, vous avez exactement l'effet inverse de la commande dans votre question, en utilisant la même partie de la chaîne pour faire la correspondance.
$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.
Explication: dans sed (et ailleurs, comme dans vim), utilisez carat (^
) pour indiquer le début de la ligne. La substitution supprime uniquement ce texte.
Vous pouvez utiliser l'option sed
__s
. La commande sera,
echo "hello world, I am just simple text for display."|sed 's/.*, //g'
donne
I am just simple text for display.
Explication
.*
correspond à un nombre quelconque de caractères,<space>
correspond, et espace.*,<space>
correspond à tout ce qui précède et à l'espace, y compris les deux, et ne les remplace par rien.