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