sed 's/[^"]*"\([^"]*\).*/\1/'
' '内の部分の説明
- s - sed に代入を指示します
- / - 検索する正規表現文字列の開始
- [^"]* - " 以外の任意の文字、任意の回数。 (一致 パラメータ名= )
- " - ただの " .
- ([^"]*) - () 内のものは、後で使用するための参照用に保存されます。 \ があるので、括弧は検索対象の文字とは見なされません。 [^"]* は上記と同じ意味です (RemoteHost に一致) 例)
- .* - 任意の文字、任意の回数。 (一致 " access="readWrite"> /parameter )
- / - 検索正規表現の終わりと置換文字列の始まり
- \1 - 上記の括弧内にある文字列への参照
- / 置換文字列の末尾
基本的には s/これを検索/これで置換/ しますが、行全体を以前に見つけた一部だけに置き換えるように彼に伝えています.
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
awk
が必要です .
これは簡単で汚いハックです:
awk -F "\"" '{print $2}' /tmp/file.txt
PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription