Dans sed, comment puis-je faire un remplacement de motif quand une ligne ne contient pas certains motifs?
Je sais comment le faire en vi ou vim.
Par exemple, pour remplacer « lapin » à « lièvre » lorsque la ligne ne contient pas « animal », je peux fairedans sed, comment faire une substitution de modèle seulement quand un autre modèle n'existe pas
:g!/animal/s/rabbit/hare/g
Je veux faire la même chose pour des centaines de fichiers dans un répertoire en utilisant foreach , trouver et sed. Lorsque la ligne ne contient pas '= (Dtype)', je veux remplacer 'Dtype val1 = expression;' à 'Dtype val1 = (Dtype) (expression);'. Mais en excluant des cas comme 'Dtype * pval = expression;'. C'est-à-dire, je veux mettre (Dtype) le moulage pour des assignations de non-pointeur. J'ai essayé
>foreach i (`find . -name \*.c`)
? sed -e 'g!/ = (Dtype)/s/Dtype \([a-z].*\) = \(.*\);/Dtype \1 = (Dtype)(\2);/g' $i >! tmp
? mv tmp $i
? end
Mais ce 'g!/Modèle/s/patter1/pattern2/g' ne fonctionne pas dans sed. Quelle est la bonne commande?
voir https://stackoverflow.com/documentation/sed/3120/address-and-address-range#t=201707250606219921435 – Sundeep
@Sundeep Bonjour, votre référence est dans la documentation. Comment puis-je le rechercher? séparément dans la section Documentation? –
Copie possible de [Comment remplacer globalement les chaînes dans les lignes ne commençant pas par un certain modèle] (https://stackoverflow.com/questions/4953738/how-to-globally-replace-strings-in-lines-not-starting- with-a-certain-pattern) – Sundeep