次の行を含むファイルがあります。
<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>
このファイルでコマンドを実行して、次の出力に表示されているパラメーター名のみを抽出します。
$sedcommand file.txt
PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription
このコマンドは何でしょうか?
awk
が必要です。
これは迅速で汚いハックになります。
awk -F "\"" '{print $2}' /tmp/file.txt
PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription
grepはものを抽出するために生まれました:
grep -Po 'name="\K[^"]*'
データを使用してテストします。
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
sed 's/[^"]*"\([^"]*\).*/\1/'
仕事をします。
Sedやawkなどのツールを使用してXMLを解析しないでください。エラーが発生しやすいです。
入力が変更され、nameパラメーターの前にスペースではなく改行文字が表示されると、いつかは失敗し、予期しない結果が生じます。
入力が常にこの方法でフォーマットされることを本当に確信している場合は、cut
を使用できます。 sed
およびawk
よりも高速です。
cut -d'"' -f2 < input.txt
最初に解析し、パラメータ名属性のみを抽出する方が良いでしょう:
xpath -q -e //@name input.txt | cut -d'"' -f2
Xpathの詳細については、このチュートリアルを参照してください。 http://www.w3schools.com/xpath/
cut
の使用方法の説明:
cat yourxmlfile | cut -d'"' -f2
"d elimiterに基づいてファイル内のすべての行を「カット」し、2 nd f ield、これはあなたが望んだものです。