簡體   English   中英

使用 sed 命令提取子字符串

[英]Extract substring with sed command

我有一個包含此字符串的文件:

2020-12-21 10:46:49.165 INFO: [41] browser.leaveCallAndQuitBrowser() [2020-12-21T10:46:36+0000] [FINE] DevTools WebSocket Event: Runtime.consoleAPICalled 74D7A734C0BD6EEFA60271821A6A2F55 {
   "args": [ {
      "type": "string",
      "value": "2020-12-21T10:46:36.633Z"
   }, {
      "type": "string",
      "value": "[modules/xmpp/xmpp.js]"
   }, {
      "type": "string",
      "value": "\u003CA.connectionHandler>: "
   }, {
      "type": "string",
      "value": "My Jabber ID: recorder@recorder.mydomain/hjE0dMPL"
   } ],
...

我正在嘗試使用sed命令從文件recorder@recorder.mydomain.com/vT1gTnAz提取此字符串,但無法完成。 任何有sedregex經驗的人都可以幫助或指導我這樣做嗎?

目前,我使用兩個命令執行此操作:我首先獲取“我的 Jabber ID:recorder@recorder.mydomain.com/hjE0dMPL”,然后用空字符串替換我的 Jabber ID:。

grep -EiEio '\bMy Jabber ID: (recorder@[A-Z0-9.-]+\.[A-Z]{2,4}.*)\b' browser.0.txt | sed 's/^My Jabber ID: //g'

不過,在一個命令中完成它會更優雅。

為此,您應該使用像 jq 這樣合適的 json 解析器,但是如果由於某種原因不能使用 jq,則可以使用 sed:

sed -rn 's/(^.*My Jabber ID: )(.*)(".*$)/\2/p' file

使用 -r 啟用正則表達式,然后使用正則表達式將該行分成三個部分,僅用該行替換第二部分並打印。

您可以直接使用 grep 解決此問題。 假設您的內容在 test.txt 文件中:

 cat test.txt |grep -Po '"value": "My Jabber ID: \K[^"]*'

將返回

recorder@recorder.room-test5.11sight.com/hjE0dMPL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM