web-dev-qa-db-fra.com

Comment supprimer les lignes contenant un astérisque à l'aide de la commande sed

J'ai un fichier qui contient les lignes suivantes.

**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**

Je souhaite supprimer toutes les lignes contenant les motifs suivants à l'aide de la commande Sed.

**;**;**;
**;**;**

Aidez-moi, s'il vous plaît. Merci.

3
JalT
sed '/\*\*;\*\*;\*\*;\?/d' file
  • \*\*;\*\*;\*\*;\?: correspond à une chaîne **;**;** éventuellement suivie d'un caractère ;;
  • d: supprime la ligne.

Pour éditer le fichier en place:

sed -i '/\*\*;\*\*;\*\*;\?/d' file
% cat file                                          :(
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
% sed '/\*\*;\*\*;\*\*;\?/d' file
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
% 
1
kos

Plus généralement, pour supprimer toute ligne ne contenant que des points-virgules et des astérisques:

sed '/^[*;]\+$/d'

Bien que vous n'ayez pas besoin de vous limiter à sed:

grep -Ev '^[*;]+$'
1
glenn jackman

la réponse de Kos fait déjà le travail. Ma réponse améliore seulement quelque peu la regex.

En utilisant le modèle de regroupement \( \) et le .\+ échappé, nous pouvons lui indiquer de faire correspondre le groupe entier **; et tout ce qui est suivi. Dans cet exemple, j'utilise

$  sed -e "s|\(\*\*;\).\+|TEST|g"  stars.txt                            
TEST
*(Eng_Sen:This is an Apple)TEST
TEST
TEST
*(Eng_Sen:This is an Apple)TEST
TEST

Notez que la version GNU sed peut prendre n'importe quel caractère comme séparateur dans la commande de substitution, pas seulement /. Ici, j'utilisais une barre verticale.

Dans l'exemple ci-dessus, j'ai pris la liberté d'augmenter l'exemple du PO de 3 à 6 lignes.

$ cat stars.txt                                                
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
0
Sergiy Kolodyazhnyy

Vous pouvez utiliser Vim en mode Ex:

ex -sc 'g/\*\*/d' -cx file
  1. g recherche globale

  2. d delete

  3. x enregistrer et fermer

0
Steven Penny