GNU/Linux >> Linux の 問題 >  >> Linux

sed を使用して部分文字列を抽出する方法

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

Linux
  1. Sedを使用して複数行の文字列を置き換える方法は?

  2. sed を使用して二重の空行のみを削除するには?

  3. sed を使用してファイルの最後の n 行を削除する方法

  1. Linuxsedコマンドの使用方法

  2. Linuxでcronを使用する方法

  3. LinuxでSedコマンドを使用する方法と例

  1. LinuxでBusyBoxを使用する方法

  2. Nginxを使用してリダイレクトする方法

  3. LinuxでSuコマンドを使用する方法