Rechercher et supprimer un caractère spécial

J'ai ci-dessous string dans mon file DDL et je veux supprimer le dernier caractère ) .

DDL a le ) caractère dans beaucoup d'endroits, mais je veux enlever seulement en dessous de l'endroit indiqué.

 .. `event_sts` ssortingng, `rsn_code` ssortingng) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' ESCAPED BY '\\\\') <----- here STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 

J'ai essayé d'utiliser sed mais en quelque sorte ça ne fonctionne pas.

note: J'ai beaucoup de DDL avec la même exigence si l'occurrence de '(' n'est pas statique.

Cela supprimera tous ) de toute ligne qui contient ESCAPED :

 sed '/ESCAPED/s/)//g' filename 

Pour changer le file sur place:

 sed -i.bak '/ESCAPED/s/)//g' filename 

Comment ça marche

  • /ESCAPED/

    Cela sélectionne uniquement les lignes contenant ESCAPED .

  • s/)//g

    Pour les lignes sélectionnées, cela supprime tout ) .

    La command substutute ressemble généralement à s/old/new/ qui search l'expression régulière old et la remplace par new . Dans notre cas, old est ) et new est une string vide. Par conséquent ) est supprimé. Le g à la fin de la command dit à sed de le faire pour chaque occurrence de ) sur la ligne, pas seulement la première.