GNU/Linux >> Znalost Linux >  >> Linux

Jak použít sed k extrakci podřetězce

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

dělá svou práci.

vysvětlení části uvnitř ' '

  • s – řekne sedovi, aby nahradil
  • / - začátek řetězce regulárního výrazu, který se má hledat
  • [^"]* - libovolný znak, který není ", kolikrát. (odpovídá název parametru= )
  • “ – pouze .
  • ([^"]*) - cokoliv uvnitř () bude uloženo pro pozdější použití. \ jsou zde, takže závorky nejsou považovány za znaky k vyhledávání. [^"]* znamená totéž jako výše. (odpovídá RemoteHost například)
  • .* – libovolný znak, libovolný počet opakování. (odpovídající " access="readWrite"> /parametr )
  • / - konec regulárního výrazu hledání a začátek náhradního řetězce.
  • \1 - odkaz na řetězec, který jsme našli v závorkách výše.
  • / konec zástupného řetězce.

v podstatě s/vyhledejte toto/nahraďte tímto/ ale říkáme mu, aby nahradil celý řádek jen jeho kouskem, který jsme našli dříve.


grep se narodil, aby extrahoval věci:

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

otestujte se svými údaji:

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

Chcete awk .

To by byl rychlý a špinavý hack:

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

PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription

Linux
  1. Jak používat BusyBox na Linuxu

  2. Jak používám cron v Linuxu

  3. Jak použít příkaz „tar“ k extrahování balíčků souborů .xz v Linuxu?

  1. Jak použít Sed k výměně víceřádkového řetězce?

  2. Extrahovat podřetězec podle Regexp s Sed nebo Grep?

  3. Jak použít sed k odstranění pouze dvojitých prázdných řádků?

  1. Jak používat příkaz sed pro Linux

  2. Jak používat Nginx k přesměrování

  3. Jak používat Sed Command v Linuxu s příklady