Magia di Linux da linea di comando - trovare e sostituire

on December 24, 2008 da Sukrit Dhandhania il 24 dicembre 2008

Linux

Quando si lavora su Linux da linea di comando e vi imbattete in un file di grandi dimensioni o di un gran numero di file in cui è necessario sostituire un testo con un altro, trovare e incollando su ciascuna istanza del testo può essere un po 'di tempo. Beh, non ti preoccupare di più. Linux è la soluzione giusta per voi. Ecco un modo per trovare e sostituire una stringa di testo in uno o più file in modo automatico.

Ai fini di questo esercizio si utilizzerà uno strumento della riga di comando di Linux chiamata "sed". "Sed" è un potente e versatile strumento, e una partita può essere scritto circa le sue capacità. Si sta utilizzando un aspetto molto limitato di "sed" qui. I would definately consigliamo di leggere un po 'di più su "sed" se trovate questo aspetto è di interesse.

Stiamo andando ad utilizzare la seguente sintassi per trovare e sostituire una stringa di testo in un file:

# Sed-i 's / [orginal_text] / [new_text] /' nomefile.txt

Diciamo che avete un file chiamato "database.txt", con numerosi casi di l'indirizzo IP del server di database in essa. Lei è appena passato a un nuovo server di database e la necessità di aggiornare con il nuovo indirizzo IP del server. Il vecchio indirizzo IP è 192.168.1.16 e quello nuovo è 192.168.1.22. Ecco come procedere:

# Cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = / home / calvin /
PROD_DB = 192.168.1.16

# Sed-i 's/192.168.1.16/192.168.1.22/g' database.txt
C # a database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = / home / calvin /
PROD_DB = 192.168.1.22

Ora aprite il file "database.inc" e controllare per vedere se il nuovo indirizzo IP ha avuto luogo uno dei tuoi vecchi. Ecco la disgregazione del comando precedente. Prima di chiamare il "sed" comando. Poi si passa il parametro "-s", che sta per "al posto di". Ora si usa un po 'di espressioni regolari, comunemente noto come "espressioni regolari" per il prossimo bit. La "s" nella stringa tra virgolette l'acronimo di "sostituzione", e "g", alla fine sta per "globale". Tra essi si traducono in una "sostituzione globale della stringa di testo che si terrà a tra di loro.

È possibile saltare la "g" alla fine. Ciò significa che la sostituzione non sarà a livello mondiale, che praticamente si traduce per la sostituzione del solo il primo esempio della stringa in una linea. Quindi, se avete avuto una linea con più istanze del testo che si sta tentando di sostituire, ecco cosa succederà

# Cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = / home / calvin /
PROD_DB = 192.168.1.16, 192.168.1.16

# Sed-i 's/192.168.1.16/192.168.1.22 /' database.txt
# Cat database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = / home / calvin /
PROD_DB = 192.168.1.22, 192.168.1.16

Qui nasce la vera e propria magia. Ora, dire che si desidera modificare una stringa di testo non solo in un unico file, ma in tutta la directory che si sono a. Ci sono un certo numero di file di testo in cui si ha bisogno per trovare e sostituire il "vino" con "champagne" .

# Find. -maxdepth 1-name "*. txt"-type f-exec sed-i 's / vino / champagne /' () \

Usiamo trovare il comando per ottenere una lista di tutti i file di testo nella directory corrente. Questo è il "trovare. -maxdepth 1-name "*. txt"-type f "parte. "Trovare. Maxdepth 1" dire al computer per guardare nella directory corrente e non andare più profondo che la directory corrente. La '-name "*. txt"' parte dice di trovare solo i file con l'elenco estensione ". Txt". Poi il "tipo F" sezione specifica che "trovare" dovrebbe solo scegliere esattamente corrispondenti file. Infine, la "-exec" parte dice "trovare" per eseguire il comando che segue, che, in questo caso, è il "sed" per sostituire il testo - "sed-i 's / vino / champagne /' () \ ".

Mi rendo conto che il comando di cui sopra sembra complicato. Tuttavia, una volta che si utilizza un po 'vi renderete conto che probabilmente è da notare che il basso e di utilizzarlo. Ora prova a cambiare una stringa di testo in più livelli di directory.

Related Interventi:
  • Processo in esecuzione in background con nohup
  • Inizia con il Vim editor di testo
  • Come scaricare i file di Linux da linea di comando
  • Come impostare la data sulla vostra macchina Linux
  • Come configurare host virtuali in Apache
  • Ottieni Aiuto tutorial semplice come questo nella tua casella di posta tutti i giorni - gratuitamente! Basta inserire il tuo indirizzo email qui sotto:

    Si può sempre scegliere di questa e-mail di iscrizione in qualsiasi momento.


    Favoriti e Condividi

    2 comments… read them below or (2 ... leggere i commenti qui sotto o aggiungere uno )

    1 marco 12.29.08 a 11:36 pm

    > Poi si passa il parametro "-s", che sta per "al posto di".
    Penso che deve essere "-i"

    2 myhnet 12.31.08 alle 9:03 pm

    Ora aprite il file "database.inc" e controllare per vedere se il nuovo indirizzo IP ha avuto luogo uno dei tuoi vecchi.

    database.inc qui penso che dovrebbe essere database.txt

    Lascia un tuo commento

    È possibile utilizzare questi tag HTML e attributi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>