GNU/Linux >> Linux Esercitazione >  >> Linux

Corrispondenza di pattern multilinea utilizzando Sed, Awk o Grep?

Questa domanda ha già risposte qui :Come posso "grep" pattern su più righe?

(9 risposte)
Chiuso 2 anni fa.

È possibile eseguire una corrispondenza di pattern multilinea usando sed , awk o grep ? Prendi ad esempio, vorrei ottenere tutte le righe tra { e }

Quindi dovrebbe essere in grado di corrispondere

 1. {}
 2. {.....}
 3. {.....
.....}

Inizialmente la domanda utilizzava <p> come esempio. Modificata la domanda per utilizzare { e} .

Risposta accettata:

Anche se sono d'accordo con il consiglio di cui sopra, che vorrai ottenere un parser per qualcosa di più di un minuscolo o completamente ad hoc, è (appena 😉 possibile abbinare blocchi multilinea tra parentesi graffe con sed.

Ecco una versione di debug del codice sed

sed -n '/[{]/,/[}]/{
    p
    /[}]/a
     end of block matching brace

    }' *.txt

Alcune note,

  • -n significa "nessuna riga di stampa predefinita durante l'elaborazione".
  • 'p' significa adesso stampa la riga.
  • Il costrutto /[{]/,/[}]/ è un'espressione di intervallo. Significa scansionare finché non trovi qualcosa che corrisponda al primo pattern (/[{]/) E poi scansiona fino a trovare il secondo modello (/[}]/) QUINDI esegui tutte le azioni che trovi tra { } nel codice sed. In questo caso 'p' e il codice di debug. (non spiegato qui, usalo, modificalo o eliminalo come funziona meglio per te).

Puoi rimuovere il debug /[}]/a fine blocco quando dimostri con soddisfazione che il codice corrisponde davvero ai blocchi delimitati da {,}.

Questo esempio di codice salterà tutto ciò che non è all'interno di una coppia di parentesi graffe.
Sarà facilmente confuso se hai {,} extra incorporato in stringhe, reg-exps, ecc., OR dove la parentesi graffa di chiusura è la stessa linea , (grazie a fred.bear)

Spero che questo aiuti.


Linux
  1. Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern

  2. Stampa la riga precedente dopo una corrispondenza di pattern utilizzando Sed?

  3. Sed:stampa solo la prima occorrenza di una corrispondenza di pattern?

  4. Trova solo la prima occasione usando solo Grep?

  5. Usando grep per cercare al contrario

Come eseguire la ricerca del modello nei file utilizzando Grep

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Elimina le righe vuote usando sed

Visualizza corrispondenza trovata o non utilizzando awk

Usando grep vs awk

Utilizzo di sed per sostituire uno schema specifico