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).