linux - linux 中的子字符串基于第一次出现

标签 linux string unix

<分区>

我在文件中有一个原始的未格式化字符串,如下所示。

"],"id":"1785695Jkc","vector":"profile","
"],"id":"jashj24231","vector":"profile","
"],"id":"3201298301","vector":"profile","
"],"id":"1123798749","vector":"profile","

我只想提取如下的 id 值

1785695Jkc

我试过下面的命令

grep -o -P '(?<="],"id":").*(?=",")' myfile.txt >new.txt

但这需要 "," 的最后一次出现,如下所示

1785695Jkc","vector":"profile

但我只需要在第一次出现时拆分。

最佳答案

要仅提取 id 值,例如,上面似乎是长度为 10 的字母数字字符串,请使用:

$ awk 'match($0,/[[:alnum:]]{10}/){print substr($0,RSTART,RLENGTH)}' file
1785695Jkc
jashj24231
3201298301
1123798749

如果 values like 的定义不正确,请更具体地说明要求。

顺便说一句,稍微更改一下 grep 也可以:

$ grep -o -P '(?<="],"id":")[^"]*' 

关于linux - linux 中的子字符串基于第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820460/

相关文章:

python拆分字符串但保留分隔符

unix - 命令管道进入子shell

c++ - Linux网络编程。我可以从什么开始?

linux - csh shell 脚本故障排除

regex - 什么是仅匹配空字符串的正则表达式?

linux - 如何创建带有时间戳的动态日期?

c++ - Shell 附加重定向替换现有文本?

c - Linux 原始套接字权限问题

linux - docker attach - 将 tty false 变为 tty true

php - 如何将 bool 值转换为字符串