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