Regex pour supprimer les occurrences d’un mot du texte, mais ne laisser qu’un espace entre chaque mot

Voici un problème que je rencontre souvent. J’ai un fichier texte qui contient des mots, un espace entre chaque mot et aucun espace au début ou à la fin d’une ligne. Je voudrais par exemple utiliser sed pour supprimer les occurrences d’un mot, en ne laissant qu’un espace entre chaque mot, aucun espace au début ou à la fin d’une ligne. Est-ce possible avec une seule expression régulière?

La meilleure solution à laquelle je peux penser nécessite trois expressions régulières.

% cat text ABCABCA % sed -r 's/ ?\bA\b ?/ /g' text BCBC % sed -r 's/ ?\bA\b ?/ /g' text | sed 's/^ *//' | sed 's/ *$//' BCBC 

Vous pouvez utiliser cet awk

 awk '{gsub(/\/,"");$1=$1}1' file BCBC 

Le $1=$1 est utilisé pour nettoyer la sortie, donc il n’y a qu’un espace entre les mots après la suppression des A s.


Si vous souhaitez que l’espacement double / sortingple soit intact dans les lignes sans A , utilisez ceci:

 awk 'gsub(/\/,""){$1=$1}1' file BCBC 

Il ne modifiera que la ligne avec A

Edit: Mise à jour avec une limite de mot, elle ne supprime donc pas une partie des mots.

Avec sed :

 AMD$ sed -r 's/\bA | A$//g' File BCBC 

Ici, nous supprimons A avec un espace. Nous couvrons les 2 possibilités (a. A au début ou n’importe où entre, b. A à la fin).