url 的 sed 替换帮助
sed replacement assistance with url
我需要以下 xml 数据在我的变量和 return https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
中由 sed 解析
我正在使用一个名为 PLX_IP 的变量:
IPADDRESS=$(
curl -b plexcookie.txt "https://plex.tv/pms/resources.xml?includeHttps=1&X-Plex-Token=${PLX_TOK}" | \
sed 's/.*uri=\"\([^\"]*\)\"\slocal.*//g' | \
tail -n 5)
<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer size="6">
<Device name="Test" product="Plex Media Server" productVersion="1.14.1.5490-33830be0b" platform="Android" platformVersion="8.0.0" device="SHIELD Android TV" clientIdentifier="adfafasdfasdfasdfsdf" createdAt="1548647140" lastSeenAt="23424324" provides="server" owned="1" accessToken="asdfasdfadfadsfadsfa" publicAddress="11.111.11.11" httpsRequired="1" synced="0" relay="1" publicAddressMatches="1" presence="1">
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="11.111.11.11" port="11111" uri="https://11-111-11-11.385ualfkj3fakedlajkf353029485234.plex.direct:11111" local="0"/>
</Device>
<Device name="Firefox" product="Plex Web" productVersion="3.91.0" platform="Firefox" platformVersion="65.0" device="OSX" clientIdentifier="adfafasdfasdfasdfsdf" createdAt="asdf" lastSeenAt="" provides="client,player,pubsub-player" owned="1" publicAddress="11.111.11.11" publicAddressMatches="1" presence="1" accessToken="asdfasdfadfadsfadsfa">
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="11.111.11.11" port="11111" uri="https://11-111-11-11.385ualfkj3fakedlajkf353029485234.plex.direct:11111" local="0"/>
</Device>
</MediaContainer>
这只是 return 最后 5 行,但我只需要 https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
非常感谢任何帮助。我知道 xml 解析器可能更适合这个,但我正在嵌入式盒子上开发它,无法承受额外的开销
正如 oguzismail 所写,最好使用 xmlparser,但即使使用简单的工具也可以解决这个问题:
1.从 xml 文件
中搜索所有有趣的行
grep 'local="1"' file.xml
此产品:
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
2。从这行
中提取uri的形式
sed "s/.*uri=\"\([^\"]*\)\"\slocal.*//g"
此产品:
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
3。 uri 是相同的,您可以使用其中之一(例如最后一个)
tail -1
这个产品
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
4。将所有部分连接在一起
grep 'local="1"' file.xml | sed "s/.*uri=\"\([^\"]*\)\"\slocal.*//g" | tail -1
如愿以偿!
我需要以下 xml 数据在我的变量和 return https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
我正在使用一个名为 PLX_IP 的变量:
IPADDRESS=$(
curl -b plexcookie.txt "https://plex.tv/pms/resources.xml?includeHttps=1&X-Plex-Token=${PLX_TOK}" | \
sed 's/.*uri=\"\([^\"]*\)\"\slocal.*//g' | \
tail -n 5)
<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer size="6">
<Device name="Test" product="Plex Media Server" productVersion="1.14.1.5490-33830be0b" platform="Android" platformVersion="8.0.0" device="SHIELD Android TV" clientIdentifier="adfafasdfasdfasdfsdf" createdAt="1548647140" lastSeenAt="23424324" provides="server" owned="1" accessToken="asdfasdfadfadsfadsfa" publicAddress="11.111.11.11" httpsRequired="1" synced="0" relay="1" publicAddressMatches="1" presence="1">
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="11.111.11.11" port="11111" uri="https://11-111-11-11.385ualfkj3fakedlajkf353029485234.plex.direct:11111" local="0"/>
</Device>
<Device name="Firefox" product="Plex Web" productVersion="3.91.0" platform="Firefox" platformVersion="65.0" device="OSX" clientIdentifier="adfafasdfasdfasdfsdf" createdAt="asdf" lastSeenAt="" provides="client,player,pubsub-player" owned="1" publicAddress="11.111.11.11" publicAddressMatches="1" presence="1" accessToken="asdfasdfadfadsfadsfa">
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="11.111.11.11" port="11111" uri="https://11-111-11-11.385ualfkj3fakedlajkf353029485234.plex.direct:11111" local="0"/>
</Device>
</MediaContainer>
这只是 return 最后 5 行,但我只需要 https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
非常感谢任何帮助。我知道 xml 解析器可能更适合这个,但我正在嵌入式盒子上开发它,无法承受额外的开销
正如 oguzismail 所写,最好使用 xmlparser,但即使使用简单的工具也可以解决这个问题:
1.从 xml 文件
中搜索所有有趣的行grep 'local="1"' file.xml
此产品:
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
<Connection protocol="https" address="192.168.1.123" port="32400" uri="https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400" local="1"/>
2。从这行
中提取uri的形式sed "s/.*uri=\"\([^\"]*\)\"\slocal.*//g"
此产品:
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
3。 uri 是相同的,您可以使用其中之一(例如最后一个)
tail -1
这个产品
https://192-168-1-123.385ualfkj3fakedlajkf353029485234.plex.direct:32400
4。将所有部分连接在一起
grep 'local="1"' file.xml | sed "s/.*uri=\"\([^\"]*\)\"\slocal.*//g" | tail -1
如愿以偿!