web-dev-qa-db-fra.com

Supprimer du texte entre deux chaînes spécifiques

J'ai un fichier 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 veux supprimer le texte PI jusqu'à Value:. J'ai essayé

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

De l'aide?

10
khalil saad

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

sed 's/PI.*Value://'
20
danadam

Utilisation de la commande d dans sed supprimera toute la ligne. En outre, je ne sais pas pourquoi vous utilisez < et >. Peut-être que vous les confondez avec \< et \> _ grep utilise pour désigner les limites de mots? Dans ce cas, vous devez savoir que sed utilise \b Pour les deux types de limites de mots (début et fin). Donc, vous pouvez écrire quelque chose comme ceci:

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

Pour une robustesse supplémentaire, j'utiliserais Perl pour la quantification paresseuse de . Pour que vous ne supprimiez que le texte entre la première occurrence de PI et 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
6
Joseph R.

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

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

Si vous voulez modifier votre_file directement:

sed -i "/PI/,/Value:/d" your_file
1
Feriman