- 主题:请问shell命令提取文本字符串的写法?
- 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 
 result=`cat 1.json`
 result=${result#*key\"\:\"}
 result=${result%\"\,\"update\"\:*}
 echo ${result}
 
 感觉应该有更优雅的写法,比如会用到grep awk sed之类,请问该怎么写啊?
 --
 FROM 49.7.47.*
 
- 提取json里的内容不是应该用jq嘛
 
 【 在 flyacat (放·逐) 的大作中提到: 】
 : 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 : ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 : result=`cat 1.json`
 : ...................
 --
 FROM 122.225.220.*
 
- json用jq, 用grep可以这样写:
 grep -oP '(?<="key":")\w+'
 
 【 在 flyacat (放·逐) 的大作中提到: 】
 : 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 : ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 : result=`cat 1.json`
 : ...................
 --
 FROM 114.245.104.*
 
- 可以不限于json,普通文件也可以
 
 比如
 1234start100200end888888
 
 怎么方便提取出start和end之间的字符串来啊?
 
 【 在 adoal 的大作中提到: 】
 : 提取json里的内容不是应该用jq嘛
 :
 --
 FROM 49.7.47.*
 
- 你的意图是啥?
 方式很多。
 固定位置的,可以cut,然后用sed或者trn(这个我不确定)去掉双引号.
 
 【 在 flyacat 的大作中提到: 】
 :
 : 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 : ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 :
 : result=`cat 1.json`
 
 #发自zSMTH@Redmi Note 7
 --
 FROM 183.162.53.*
 
- 整个python多好
 非要这么麻烦
 
 
 
 【 在 flyacat (放·逐) 的大作中提到: 】
 : 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 : ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 : result=`cat 1.json`
 : ...................
 --
 FROM 121.69.60.*
 
- json用jq是正解
 
 【 在 world (You are my world) 的大作中提到: 】
 : 标  题: Re: 请问shell命令提取文本字符串的写法?
 : 发信站: 水木社区 (Tue Oct 26 17:13:39 2021), 站内
 :
 : json用jq, 用grep可以这样写:
 : grep -oP '(?<="key":")\w+'
 :
 : 【 在 flyacat (放·逐) 的大作中提到: 】
 : : 文件1.json里有一特定字符串,想提取出来,数据类型大概这样:
 : : ...}]},"key":"B4923BA821899B94978C10a3CB1fD20835","update":true},...
 : : result=`cat 1.json`
 : : ...................
 :
 : --
 : 辟谣:2012年12月21不是我的末日。
 :
 :
 : ※ 来源:·水木社区 mysmth.net·[FROM: 114.245.104.*]
 --
 FROM 124.207.188.194
 
- 先取start右边,再取end左边
 【 在 flyacat 的大作中提到: 】
 : 可以不限于json,普通文件也可以
 :
 : 比如
 : 1234start100200end888888
 :
 : 怎么方便提取出start和end之间的字符串来啊?
 : --
 
 发自「今日水木 on V2055A」
 --
 FROM 223.72.88.*
 
- echo "1234start100200end888888" | grep -Po '(?<=start)(.*)(?=end)'
100200 - 【 在 flyacat 的大作中提到: 】 - : 可以不限于json,普通文件也可以 - : 比如 - : 1234start100200end888888 - : ................... - -- - FROM 125.71.196.* 
- 多谢!
 
 【 在 poocp 的大作中提到: 】
 : [code=bash]
 : echo "1234start100200end888888" | grep -Po '(?<=start)(.*)(?=end)'
 : 100200
 : ...................
 --
 FROM 49.7.47.*