Mon but est d’ajouter "
des guillemets chaque fois que le mot ci-dessous arrive dans le fichier.
VGHIER_TSV_WB798
CBVGHIER_TSV_WB798
ici
sed -i 's/"VGHIER_TSV_WB798"./VGHIER_TSV_WB798./g'
est utilisé pour supprimer la double citation, le cas échéant, et
sed -i 's/VGHIER_TSV_WB798./"VGHIER_TSV_WB798"./g'
pour ajouter la citation mais le problème que je me pose quand nous avons eu le CBVGHIER_TSV_WB798
c'est repalced comme
CB"VGHIER_TSV_WB798"
, ce que je ne veux pas, j'ai une déclaration sed séparée pour repalce le mot suivant
sed -i 's/CBVGHIER_TSV_WB798./"CBVGHIER_TSV_WB798"./g'
Pourriez-vous m'aider, s'il vous plaît, à atteindre cet objectif?
sed
utilisez-vous?Réponses:
Si votre
sed
supporte les ERE, vous pouvez ajouter le enCB
tant que partie optionnelle du motif à rechercher. Cela remplacerait les deux:Ou, si vos
sed
supports\<
et\>
pour le début et la fin du mot, utilisez ceux-ci:De plus, vous avez un point final
.
dans le motif, il correspondra à tout caractère et il sera remplacé en tant que partie de la chaîne. Le point dans le remplacement mettra un point littéral en arrière.s/foo./"foo"./
changementsfood
à"foo".
la source
Je pense que vous souhaitez ajouter un préfixe à votre chaîne de recherche. Si le mot que vous essayez de remplacer sera toujours précédé d'un espace:
De manière plus générique, vous pouvez utiliser le groupe regex
[[:space:]]
pour couvrir les cas d'espaces ou de tabulations, etc. (voir laman isspace
liste complète).Dans ce cas, nous devions ajouter une complexité supplémentaire en créant un groupe de regex utilisant les parenthèses et en utilisant une référence arrière
\1
pour être sûr de ne pas perdre le caractère exact lors du remplacement. Il existe également une classe regex[[:punct:]]
pour les caractères de ponctuation, au cas où le mot serait parfois précédé de l'un d'entre eux. Voirman isspace
pour une liste complète et détaillée de ce que couvre chaque classe de caractères regex.Voici un exemple de solution plus complexe pour couvrir le cas de préfixes de ponctuation possibles:
Ceci utilise la directive regex
|
(avec une barre oblique inverse poursed
) pour indiquer une alternative.Enfin, si le mot sera toujours le premier élément de la ligne, utilisez la
^
regex pour exiger que:Et oui, pour tout ce qui précède, vous pourriez avoir "groupé" ed et "référencé en arrière" votre chaîne:
la source