Come trovare e rimuovere la riga dal file in Unix?

Ho un file (per esempio: test.txt), questo file contiene alcune linee e, ad esempio, una riga è: abcd=11
Ma può essere per esempio: abcd=12
Il numero è diverso, ma abcd= è la stessa in tutti i casi, quindi, può qualcuno darmi comando di questa linea e rimuoverlo?

Ho provato: sed -e \"/$abcd=/d\" /test.txt >/test.txt ma rimuove tutte le linee dal mio file e ho anche cercato: sed -e \"/$abcd=/d\" /test.txt >/testNew.txt ma non eliminare la riga da test.txt è solo crea un nuovo file (testNew.txt) e in questo file si rimuove la mia linea. Ma non è quello che voglio.

$abcd sarà analizzato dalla shell. Se la shell var non definito, sarà effettivamente “eliminato” dagli argomenti. Che farei tuo sed chiamata \"/=/d\" e brindisi di tutte le righe che hanno un =.

OriginaleL’autore Adam | 2012-03-22

3 Replies
  1. 9

    Basato sulla descrizione nel testo, qui è una ripulita versione del tuo script sed che dovrebbe funzionare.

    Assumendo un linux GNU sed

    sed -i '/abcd=/d' /test.txt 
    

    Se si utilizza OS-X, allora avete bisogno

    sed -i "" '/abcd=/d' /test.txt 
    

    Se queste non funzionano, quindi utilizzare la vecchia scuola sed con un condizionale mv per gestire il tuo tmpfiles.

    sed '/abcd=/d' /test.txt > test.txt.$$ && /bin/mv test.txt.$$ test.txt
    

    Note:

    Non so perché stai facendo \"/$abcd=/d\", non c’è bisogno di fuggire " caratteri, a meno che si sta facendo di più con questo codice di indicare (come l’utilizzo di eval). Basta scrivere come "/$abcd=/d".

    Normalmente non c’è bisogno ‘-e’

    Se vuoi davvero usare ‘$abcd, allora avete bisogno di dare un valore E come stai corrispondenza della stringa ‘abcd=’, allora si può fare

     abcd='abcd='
     sed -i "/${abcd}/d" /test.txt 
    

    Spero che questo aiuta.

    OriginaleL’autore shellter

  2. 0

    Ecco una soluzione l’uso di grep:

    $ grep -v '^\$abcd=' test.txt
    

    Prova di concetto:

    $ cat test.txt
    a
    b
    ab
    ac
    $abcd=1
    $abcd=2
    $abcd
    ab
    a
    $abcd=3
    x
    
    $ grep -v '^\$abcd=' test.txt
    a
    b
    ab
    ac
    $abcd
    ab
    a
    x
    
    Non funziona, non toglie che di linea dal file.
    Strano, ha lavorato bene sulla mia. Forse diverse versioni di GNU grep in uso qui…

    OriginaleL’autore AlG

  3. 0

    Per quanto ne so, questo comando può essere utilizzato per creare un altro file con le linee cancellate. Ora che abbiamo un altro file, si può rinominare il file e cancellare il file originale, se vogliamo.
    Dovrete solo fare questo

           grep -v '^\$abcd=' test.txt > tmp.txt
    

    ora tmp.txt avrà contenuti

    a
    b
    ab
    ac
    $abcd
    ab
    a
    x
    

    Se si vuole si può rinominare in questo test.txt dopo l’eliminazione di test.txt

    OriginaleL’autore Pushpe

Lascia un commento