2011-09-28 24 views
5

Mi piacerebbe sapere se c'è un modo per fare sostituzioni regexp multiple in bash con $ {stringa // sottostringa/sostituzione} o, eventualmente, quale soluzione migliore esiste.sostituzione di espressioni regolari multiple sulla variabile in bash?

Ho uno script per inviare aggiornamenti a statusnet e friendika con arricciatura. Firmare le petizioni online, ad esempio, e mi viene offerto di twittarle, ma preferisco inviare a identica. Sono stanco di incollare cose e dover modificare nel terminale per sfuggire a @ e #,! e ?. Mi piacerebbe sostituirli regexp nel mio script per modificare automagically

@repbunghole and @SenatorArsehat Stop farking around with #someship! Do you want me to come smack you? | http://someshort.url 

a

\@repbunghole \@SenatorArsehat Stop farking around with \#someship\! Do you want me to come smack you\? \| http://someshort.url 

Non ho forte fu sed o awk, ma immagino che possono offrire soluzioni, e io don Sappiamo come usare sed senza scrivere la variabile in un file, leggendo il file e agendo su di esso, quindi impostando la var con var = $ (file cat). Sì. Sono piuttosto nuovo in questa roba. Non sto trovando dati sufficienti con $ {string // sottostringa/sostituzione /} per più sostituzioni. Eseguendo X volte per sfuggire a X diversi personaggi sembra inefficiente.

come

read -p "Enter a string: " a 
b=${a//\@/\\\@} 
c=${b//\#/\\\#} 
d=${c//\!/\\\!} 
e=${d//\?/\\\?} 
f=${e//\"/\\\"} 
g=${f//\'/\\\'} 

ecc, ecc lavora nel frattempo, ma è brutto ...

risposta

4

per "regex multiplo sostituzione su variabile in bash? "

sia sed che awk possono farlo. per esempio voglio sostituire

a->1 
b->2 
c->3 

con sed:

kent$ v=abc 
kent$ newV=$(sed -e's/a/1/; s/b/2/; s/c/3/' <<< $v) 
kent$ echo $newV2 
123 

con awk:

kent$ v=abc 
kent$ newV2=$(awk '{gsub(/a/,"1");gsub(/b/,"2");gsub(/c/,"3")}1' <<< $v)                 
kent$ echo $newV               
123