GNU/Linux >> Linux Esercitazione >  >> Linux

Come usare sed per estrarre la sottostringa

sed 's/[^"]*"\([^"]*\).*/\1/'

fa il lavoro.

spiegazione della parte all'interno di ' '

  • s - dice a sed di sostituire
  • / - inizio della stringa regex da cercare
  • [^"]* - qualsiasi carattere che non sia ", qualsiasi numero di volte. (corrispondente a nome parametro= )
  • " - solo un " .
  • ([^"]*) - qualsiasi cosa all'interno di () verrà salvata per riferimento da utilizzare in seguito. Le \ ci sono quindi le parentesi non sono considerate come caratteri da cercare. [^"]* ha lo stesso significato di sopra. (corrisponde a RemoteHost ad esempio)
  • .* - qualsiasi carattere, qualsiasi numero di volte. (corrispondente a " access="readWrite"> /parameter )
  • / - fine della regex di ricerca e inizio della stringa sostitutiva.
  • \1 - riferimento a quella stringa che abbiamo trovato tra parentesi qui sopra.
  • / fine della stringa sostitutiva.

fondamentalmente s/cerca questo/sostituisci con questo/ ma gli stiamo dicendo di sostituire l'intera riga con solo una parte di essa che abbiamo trovato in precedenza.


grep è nato per estrarre cose:

grep -Po 'name="\K[^"]*'

prova con i tuoi dati:

kent$  echo '<parameter name="PortMappingEnabled" access="readWrite" type="xsd:boolean"></parameter>
  <parameter name="PortMappingLeaseDuration" access="readWrite" activeNotify="canDeny" type="xsd:unsignedInt"></parameter>
  <parameter name="RemoteHost" access="readWrite"></parameter>
  <parameter name="ExternalPort" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="ExternalPortEndRange" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="InternalPort" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="PortMappingProtocol" access="readWrite"></parameter>
  <parameter name="InternalClient" access="readWrite"></parameter>
  <parameter name="PortMappingDescription" access="readWrite"></parameter>
'|grep -Po 'name="\K[^"]*'
PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription

Vuoi awk .

Questo sarebbe un hack veloce e sporco:

awk -F "\"" '{print $2}' /tmp/file.txt

PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription

Linux
  1. Come usare il comando sed di Linux

  2. Come utilizzare il comando "tar" per estrarre i pacchetti di file .xz in Linux?

  3. Come utilizzare Sed per sostituire una stringa multilinea?

  4. Estrarre la sottostringa secondo Regexp con Sed o Grep?

  5. Come usare sed per rimuovere solo le doppie righe vuote?

Come utilizzare sed per trovare e sostituire la stringa nei file

Come utilizzare Instagram nel terminale

Come usare il comando PS

Come usare il comando TOP

COME USARE SED EDITOR

Come utilizzare Sed per trovare e sostituire una stringa in un file