我有一个文件,有很多垃圾和特殊的字符以及。我想保持一个特殊的字母数字模式,忽略所有其他东西-例如AB123456789 -我只想提取这个关键字,即两个字母'AB‘,后面是9个数字。
{“u”_受影响_“m324nkj43nkj3n4kj34n”、“数字”:“hhggjjiiijjjf”、“akdsfj”_“、”作为_组:“1 324 kj3k4j3k4jk34”、“order”、“__状态:”成功“,”阶段“、”gfhgh“、”cmdb“_词:”0989“、”u_优势_组织:“u”“_创建_组:”luiy98798yukuh“、”工作“_备注_列表:”“、”优先权“:”4“,“u”_tier4_地点:“、”审查“_日期:”、“你”_mf_批处理_英斯特_奥普托_移动:“”、“你”_请求_集团:“kjhljlkjhlkuh098709kjh”、“商业”_期限:“数字”:“AB123456789”、“请求_由”:_日期878789khgo7869876ff900158c、878789khgo7869876ff9007158c、“u_临时”、“改变_计划:”、“asd”_def:“2023-02-10 11:58:21”,“_计划:”、“短”_描述:“数据”、“u”“_替代方案_程序员_工作_号码:”、“工作”_“开始”:“”,“你”_分配_组_更新:“、”yy“_uhggfjk:”fds“、”变化“_请求、”已结束_由:“abcdef”、“开始”_日期:“2023-02-10”}
AB123456789
发布于 2017-02-10 17:51:12
如果实际输入是有效的JSON,则最好使用JSON感知工具,例如jq:
jq -r '.[0].number'.(我说"if",因为您发布的输入不是有效的JSON,因为它缺少一个双引号,其中一个键没有附加值;我假设在准备问题时可能发生了损坏。)
发布于 2017-02-10 18:14:59
如果您的文件总是有相同数量的字段,并且您的模式出现在相同的位置(例如:第72列),则可以使用简单的awk:
awk -F "\"" '{print $72}' input-file.txt似乎模式匹配不适合您,因为在文件的开头有相同的模式(AF123456789)。
我希望这个答案对你有帮助。
发布于 2017-02-10 18:33:40
有些sed应该做这个工作:
sed -e '/AB[0-9]\{9\}/!d' -e 's/.*\(AB[0-9]\{9\}\).*/\1/'https://unix.stackexchange.com/questions/344038
复制相似问题