我在文件中有一个原始未格式化的字符串,如下所示。
"],"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
但我只需要在第一次出现时拆分。
答案 0 :(得分:0)
sed 's/"],"id":"\(.*\)","vector.*/\1/' myfile.txt
假设所有行都以"],"id":"
开头,如输入所示。
哦,这是GNU sed btw,你的sed可能会使用扩展的正则表达式,在这种情况下会丢失括号的引用。
答案 1 :(得分:0)
您可以使用剪切:
仅提取所需的列.find_next_siblings
第一个剪切将采用id值对(“id”:“jashj24231”),第二个剪切将从中提取值(“jashj24231”)。最后 tr 删除封闭的引号。
答案 2 :(得分:0)
只提取上面的之类的id值,它们似乎是长度为10的字母数字字符串,请使用:
$ awk 'match($0,/[[:alnum:]]{10}/){print substr($0,RSTART,RLENGTH)}' file
1785695Jkc
jashj24231
3201298301
1123798749
如果值的定义如不正确,请更具体地说明要求。
顺便说一句,改变你的grep
也有效:
$ grep -o -P '(?<="],"id":")[^"]*'