Print all the instances of a matching pattern in a file












0















I've been trying to print all the instances of a matching pattern from file.



Input file:



{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2},
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}


I'd want to print everything between "id":" and ",.



Expected output:



prod123
prod456
prod789
prod101112


I'm using the command



grep -Eo 'id":"[^"]+"",*' | grep -Eo '^[^"]+'


Am I missing anything here?










share|improve this question




















  • 2





    Do you have jq installed?

    – anubhava
    Nov 14 '18 at 17:18






  • 2





    Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

    – kvantour
    Nov 14 '18 at 17:27






  • 1





    Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

    – chepner
    Nov 14 '18 at 17:27
















0















I've been trying to print all the instances of a matching pattern from file.



Input file:



{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2},
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}


I'd want to print everything between "id":" and ",.



Expected output:



prod123
prod456
prod789
prod101112


I'm using the command



grep -Eo 'id":"[^"]+"",*' | grep -Eo '^[^"]+'


Am I missing anything here?










share|improve this question




















  • 2





    Do you have jq installed?

    – anubhava
    Nov 14 '18 at 17:18






  • 2





    Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

    – kvantour
    Nov 14 '18 at 17:27






  • 1





    Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

    – chepner
    Nov 14 '18 at 17:27














0












0








0








I've been trying to print all the instances of a matching pattern from file.



Input file:



{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2},
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}


I'd want to print everything between "id":" and ",.



Expected output:



prod123
prod456
prod789
prod101112


I'm using the command



grep -Eo 'id":"[^"]+"",*' | grep -Eo '^[^"]+'


Am I missing anything here?










share|improve this question
















I've been trying to print all the instances of a matching pattern from file.



Input file:



{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2},
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}


I'd want to print everything between "id":" and ",.



Expected output:



prod123
prod456
prod789
prod101112


I'm using the command



grep -Eo 'id":"[^"]+"",*' | grep -Eo '^[^"]+'


Am I missing anything here?







bash awk sed grep






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 17:15









oguzismail

3,72031125




3,72031125










asked Nov 14 '18 at 17:09









VenkatVenkat

63




63








  • 2





    Do you have jq installed?

    – anubhava
    Nov 14 '18 at 17:18






  • 2





    Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

    – kvantour
    Nov 14 '18 at 17:27






  • 1





    Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

    – chepner
    Nov 14 '18 at 17:27














  • 2





    Do you have jq installed?

    – anubhava
    Nov 14 '18 at 17:18






  • 2





    Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

    – kvantour
    Nov 14 '18 at 17:27






  • 1





    Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

    – chepner
    Nov 14 '18 at 17:27








2




2





Do you have jq installed?

– anubhava
Nov 14 '18 at 17:18





Do you have jq installed?

– anubhava
Nov 14 '18 at 17:18




2




2





Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

– kvantour
Nov 14 '18 at 17:27





Your output seems to be a grep or whatever on a JSON file. You might be interested in using jq on your full file. But for this, we should need to see how this thing looks like.

– kvantour
Nov 14 '18 at 17:27




1




1





Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

– chepner
Nov 14 '18 at 17:27





Use some JSON parser, whether it be jq or a module in your language of choice. Don't use line-oriented tools like grep or awk to try to parse JSON.

– chepner
Nov 14 '18 at 17:27












1 Answer
1






active

oldest

votes


















0














What went wrong is the place of the comma in the first grep:



grep -Eo 'id.:.[^"]+","' inputfile


You need to do something extra for getting the desired substring.



grep -Eo 'id.:.[^"]+","' inputfile | cut -d: -f2 | grep -Eo '[^",]+'


I used cut, that would be easy for your example input.



cut -d'"' -f4 < inputfile


You have alternatives, like using jq, or



sed -r 's/{"id":"([^"]*).*/1/' inputfile


or using awk (solution now like cut but can be changed easy)



awk -F'"' '{print $4}' inputfile





share|improve this answer
























  • Thank you very much, this has helped and I got the desired result.

    – Venkat
    Nov 15 '18 at 5:41











  • In that case you can accept it: stackoverflow.com/help/someone-answers

    – Walter A
    Nov 15 '18 at 8:57











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53305448%2fprint-all-the-instances-of-a-matching-pattern-in-a-file%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














What went wrong is the place of the comma in the first grep:



grep -Eo 'id.:.[^"]+","' inputfile


You need to do something extra for getting the desired substring.



grep -Eo 'id.:.[^"]+","' inputfile | cut -d: -f2 | grep -Eo '[^",]+'


I used cut, that would be easy for your example input.



cut -d'"' -f4 < inputfile


You have alternatives, like using jq, or



sed -r 's/{"id":"([^"]*).*/1/' inputfile


or using awk (solution now like cut but can be changed easy)



awk -F'"' '{print $4}' inputfile





share|improve this answer
























  • Thank you very much, this has helped and I got the desired result.

    – Venkat
    Nov 15 '18 at 5:41











  • In that case you can accept it: stackoverflow.com/help/someone-answers

    – Walter A
    Nov 15 '18 at 8:57
















0














What went wrong is the place of the comma in the first grep:



grep -Eo 'id.:.[^"]+","' inputfile


You need to do something extra for getting the desired substring.



grep -Eo 'id.:.[^"]+","' inputfile | cut -d: -f2 | grep -Eo '[^",]+'


I used cut, that would be easy for your example input.



cut -d'"' -f4 < inputfile


You have alternatives, like using jq, or



sed -r 's/{"id":"([^"]*).*/1/' inputfile


or using awk (solution now like cut but can be changed easy)



awk -F'"' '{print $4}' inputfile





share|improve this answer
























  • Thank you very much, this has helped and I got the desired result.

    – Venkat
    Nov 15 '18 at 5:41











  • In that case you can accept it: stackoverflow.com/help/someone-answers

    – Walter A
    Nov 15 '18 at 8:57














0












0








0







What went wrong is the place of the comma in the first grep:



grep -Eo 'id.:.[^"]+","' inputfile


You need to do something extra for getting the desired substring.



grep -Eo 'id.:.[^"]+","' inputfile | cut -d: -f2 | grep -Eo '[^",]+'


I used cut, that would be easy for your example input.



cut -d'"' -f4 < inputfile


You have alternatives, like using jq, or



sed -r 's/{"id":"([^"]*).*/1/' inputfile


or using awk (solution now like cut but can be changed easy)



awk -F'"' '{print $4}' inputfile





share|improve this answer













What went wrong is the place of the comma in the first grep:



grep -Eo 'id.:.[^"]+","' inputfile


You need to do something extra for getting the desired substring.



grep -Eo 'id.:.[^"]+","' inputfile | cut -d: -f2 | grep -Eo '[^",]+'


I used cut, that would be easy for your example input.



cut -d'"' -f4 < inputfile


You have alternatives, like using jq, or



sed -r 's/{"id":"([^"]*).*/1/' inputfile


or using awk (solution now like cut but can be changed easy)



awk -F'"' '{print $4}' inputfile






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 20:33









Walter AWalter A

10.8k21031




10.8k21031













  • Thank you very much, this has helped and I got the desired result.

    – Venkat
    Nov 15 '18 at 5:41











  • In that case you can accept it: stackoverflow.com/help/someone-answers

    – Walter A
    Nov 15 '18 at 8:57



















  • Thank you very much, this has helped and I got the desired result.

    – Venkat
    Nov 15 '18 at 5:41











  • In that case you can accept it: stackoverflow.com/help/someone-answers

    – Walter A
    Nov 15 '18 at 8:57

















Thank you very much, this has helped and I got the desired result.

– Venkat
Nov 15 '18 at 5:41





Thank you very much, this has helped and I got the desired result.

– Venkat
Nov 15 '18 at 5:41













In that case you can accept it: stackoverflow.com/help/someone-answers

– Walter A
Nov 15 '18 at 8:57





In that case you can accept it: stackoverflow.com/help/someone-answers

– Walter A
Nov 15 '18 at 8:57




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53305448%2fprint-all-the-instances-of-a-matching-pattern-in-a-file%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Florida Star v. B. J. F.

Danny Elfman

Lugert, Oklahoma