voglio conservare una parte specifica di un risultato abbinato come variabile da utilizzare per la sostituzione in seguito. Mi piacerebbe tenerlo in un solo liner invece di trovare la variabile che ho bisogno prima.Usare segnaposti/variabili in un comando sed
durante la configurazione di apache, e l'uso mod_rewrite, è venire indicata parti specifiche dei modelli da utilizzare come variabili, in questo modo:
RewriteRule ^www.example.com/page/(.*)$ http://www.example.com/page.php?page=$1 [R=301,L]
la parte del pattern match che è contenuta all'interno delle parentesi viene memorizzato $ 1 per uso successivo. Quindi, se l'URL è stato www.example.com/page/home
, si sarebbe sostituito con www.example.com/page.php?page=home
. Quindi la parte "casa" della partita è stata salvata in $ 1 perché era la parte del pattern all'interno della parentesi.
voglio qualcosa di simile a questa funzionalità con un comando sed
, ho bisogno di sostituire automaticamente molte stringhe in un file di dump SQL, aggiungere tavolo goccia se esiste comandi prima di ogni tavolo creare, ma ho bisogno di sapere il nome della tabella di fare questo, quindi se il file di dump contiene qualcosa come:
...
CREATE TABLE `orders`
...
ho bisogno di eseguire qualcosa di simile:
cat dump.sql | sed "s/CREATE TABLE `(.*)`/DROP TABLE IF EXISTS $1\N CREATE TABLE `$1`/g"
per ottenere il risultato di:
...
DROP TABLE IF EXISTS `orders`
CREATE TABLE `orders`
...
Sto usando la sintassi mod_rewrite nel comando sed
come un esempio logico di ciò che sto cercando di fare.
Qualche suggerimento?
Grazie per questa spiegazione, si è completamente risposto alla mia domanda. –