Suppression de texte entre deux chaînes spécifiques

10

J'ai un fichier comme ci-dessous:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

Je souhaite supprimer le texte PIjusqu'à Value:. j'ai essayé

sed '/<PI>/,/<\/Value:>/d' 

De l'aide?

khalil saad
la source

Réponses:

20

Remplacez tout de PIà Value:avec une chaîne vide:

sed 's/PI.*Value://'
danadam
la source
10
Est-ce que cela fonctionnera si PIet Value:se produit sur des lignes différentes?
Brian Fitzpatrick
6

L'utilisation de la dcommande dans sedsupprimera toute la ligne. De plus, je ne sais pas pourquoi vous utilisez <et >. Peut-être que vous les confondez \<et \>que cela grepsert à désigner les limites des mots? Dans ce cas, vous devez savoir que les sedutilisations \bpour les deux types de limites de mots (début et fin). Vous pouvez donc écrire quelque chose comme ceci:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

Pour plus de robustesse, j'utiliserais perlpour la quantification paresseuse de .sorte que vous ne supprimiez que le texte entre la première occurrence de PIet la première occurrence de Value:. Bien sûr, tout dépend de votre cas d'utilisation.

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file
Joseph R.
la source
1

Utilisez ce code ci-dessous pour supprimer plusieurs lignes entre les motifs (y compris les lignes avec des motifs):

sed "/PI/,/Value:/d" your_file

Si vous souhaitez modifier directement votre_fichier:

sed -i "/PI/,/Value:/d" your_file
Feriman
la source
Remarquez la distinction ici - cela supprime les lignes d'une plage, tandis que la question demande de supprimer du texte entre deux chaînes.
Jeff Schaller