how to capture specific strings from line The 2019 Stack Overflow Developer Survey Results Are InReordering strings in linuxhow to delete line from the XML filelinux + how to capture values from xml fileawk + count field separator in csv and print line numberawk + how to capture email address between characterslinux + how to find the unused disk on linuxcapture the second field and the last field from stringawk/sed/perl one liner to edit json fileHow to insert file content after a certain string in a file?How to append line with strings at the end of variable?

Extreme, unacceptable situation and I can't attend work tomorrow morning

How to make payment on the internet without leaving a money trail?

Limit the amount of RAM Mathematica may access?

Are USB sockets on wall outlets live all the time, even when the switch is off?

Landlord wants to switch my lease to a "Land contract" to "get back at the city"

Can the Protection from Evil and Good spell be used on the caster?

Understanding the implication of what "well-defined" means for the operation in quotient group

How was Skylab's orbit inclination chosen?

Where does the "burst of radiance" from Holy Weapon originate?

Realistic Alternatives to Dust: What Else Could Feed a Plankton Bloom?

Geography at the pixel level

Manuscript was "unsubmitted" because the manuscript was deposited in Arxiv Preprints

On the insanity of kings as an argument against monarchy

Pristine Bit Checking

What is the steepest angle that a canal can be traversable without locks?

Is three citations per paragraph excessive for undergraduate research paper?

The difference between dialogue marks

JSON.serialize: is it possible to suppress null values of a map?

Why is the maximum length of OpenWrt’s root password 8 characters?

Should I write numbers in words or as numerals when there are multiple next to each other?

How can I fix this gap between bookcases I made?

Why do UK politicians seemingly ignore opinion polls on Brexit?

Could a US political party gain complete control over the government by removing checks & balances?

Patience, young "Padovan"



how to capture specific strings from line



The 2019 Stack Overflow Developer Survey Results Are InReordering strings in linuxhow to delete line from the XML filelinux + how to capture values from xml fileawk + count field separator in csv and print line numberawk + how to capture email address between characterslinux + how to find the unused disk on linuxcapture the second field and the last field from stringawk/sed/perl one liner to edit json fileHow to insert file content after a certain string in a file?How to append line with strings at the end of variable?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?



echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","


expected output



sdb
sdc
sdd
sde
sdf









share|improve this question
























  • You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

    – G-Man
    Apr 6 at 15:56












  • This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

    – Kusalananda
    2 days ago

















1















How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?



echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","


expected output



sdb
sdc
sdd
sde
sdf









share|improve this question
























  • You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

    – G-Man
    Apr 6 at 15:56












  • This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

    – Kusalananda
    2 days ago













1












1








1








How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?



echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","


expected output



sdb
sdc
sdd
sde
sdf









share|improve this question
















How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?



echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","


expected output



sdb
sdc
sdd
sde
sdf






awk sed perl






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago









Prabhjot Singh

107213




107213










asked Dec 22 '17 at 9:48









yaelyael

2,81243079




2,81243079












  • You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

    – G-Man
    Apr 6 at 15:56












  • This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

    – Kusalananda
    2 days ago

















  • You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

    – G-Man
    Apr 6 at 15:56












  • This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

    – Kusalananda
    2 days ago
















You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

– G-Man
Apr 6 at 15:56






You can get that output with printf '%sn' sdb sdc sdd sde sdf. If you want a more general answer, please explain what you want, in general.  Do you want to extract the sdg from /dev/sdg, or only after /rid/? What if the input contains sd1, sd17, or sda17? How about open("/dev/sd#"); would you want sd# (i.e., including the next character after sd, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?

– G-Man
Apr 6 at 15:56














This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

– Kusalananda
2 days ago





This looks like it could be from a JSON file. Are you able to share a larger portion of the file?

– Kusalananda
2 days ago










6 Answers
6






active

oldest

votes


















2














You can use GREP arguments:



 -P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.


So your command would be:



echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf





share|improve this answer




















  • 1





    Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

    – FaxMax
    Dec 22 '17 at 10:48












  • Corrected, wrong copy/paste. Thanks.

    – Kevin Lemaire
    Dec 22 '17 at 10:52


















1














Use



echo ... | grep -Eo "sd[a-z]"


where -E interprets the pattern as an (extended) regular expression and -o prints only the matching parts in each line.






share|improve this answer


















  • 1





    That’s not an extended regular expression;  that command will work without the E option.

    – G-Man
    Apr 6 at 14:29


















0














echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' 
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf





share|improve this answer






























    0














    You did not specify what x should be in sdX so one could as well assume that it might be any character:



    $ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
    sdb
    sdc
    sdd
    sde
    sdf


    A literal . means any character in regular expressions.



    And in perl because you wanted that explicitly:



    $ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
    sdb
    sdc
    sdd
    sde
    sdf





    share|improve this answer
































      0














      gnu sed:



      $ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'

      $ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'





      share|improve this answer























      • I do not get it

        – Pierre.Vriens
        Apr 6 at 13:55











      • (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

        – G-Man
        Apr 6 at 15:28











      • (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

        – G-Man
        Apr 6 at 15:28


















      0














      Above result is achieved by awk one liner



      Done by below command



      echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'


      output



      echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
      sdb
      sdc
      sdd
      sde
      sdf
      praveen@praveen:~$





      share|improve this answer























        Your Answer








        StackExchange.ready(function()
        var channelOptions =
        tags: "".split(" "),
        id: "106"
        ;
        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: false,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: null,
        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%2funix.stackexchange.com%2fquestions%2f412456%2fhow-to-capture-specific-strings-from-line%23new-answer', 'question_page');

        );

        Post as a guest















        Required, but never shown

























        6 Answers
        6






        active

        oldest

        votes








        6 Answers
        6






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        2














        You can use GREP arguments:



         -P, --perl-regexp
        Interpret the pattern as a Perl-compatible regular expression
        (PCRE). This is experimental and grep -P may warn of
        unimplemented features.
        -o, --only-matching
        Print only the matched (non-empty) parts of a matching line,
        with each such part on a separate output line.


        So your command would be:



        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
        sdb
        sdc
        sdd
        sde
        sdf





        share|improve this answer




















        • 1





          Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

          – FaxMax
          Dec 22 '17 at 10:48












        • Corrected, wrong copy/paste. Thanks.

          – Kevin Lemaire
          Dec 22 '17 at 10:52















        2














        You can use GREP arguments:



         -P, --perl-regexp
        Interpret the pattern as a Perl-compatible regular expression
        (PCRE). This is experimental and grep -P may warn of
        unimplemented features.
        -o, --only-matching
        Print only the matched (non-empty) parts of a matching line,
        with each such part on a separate output line.


        So your command would be:



        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
        sdb
        sdc
        sdd
        sde
        sdf





        share|improve this answer




















        • 1





          Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

          – FaxMax
          Dec 22 '17 at 10:48












        • Corrected, wrong copy/paste. Thanks.

          – Kevin Lemaire
          Dec 22 '17 at 10:52













        2












        2








        2







        You can use GREP arguments:



         -P, --perl-regexp
        Interpret the pattern as a Perl-compatible regular expression
        (PCRE). This is experimental and grep -P may warn of
        unimplemented features.
        -o, --only-matching
        Print only the matched (non-empty) parts of a matching line,
        with each such part on a separate output line.


        So your command would be:



        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
        sdb
        sdc
        sdd
        sde
        sdf





        share|improve this answer















        You can use GREP arguments:



         -P, --perl-regexp
        Interpret the pattern as a Perl-compatible regular expression
        (PCRE). This is experimental and grep -P may warn of
        unimplemented features.
        -o, --only-matching
        Print only the matched (non-empty) parts of a matching line,
        with each such part on a separate output line.


        So your command would be:



        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
        sdb
        sdc
        sdd
        sde
        sdf






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 22 '17 at 11:04

























        answered Dec 22 '17 at 10:41









        Kevin LemaireKevin Lemaire

        1,181724




        1,181724







        • 1





          Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

          – FaxMax
          Dec 22 '17 at 10:48












        • Corrected, wrong copy/paste. Thanks.

          – Kevin Lemaire
          Dec 22 '17 at 10:52












        • 1





          Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

          – FaxMax
          Dec 22 '17 at 10:48












        • Corrected, wrong copy/paste. Thanks.

          – Kevin Lemaire
          Dec 22 '17 at 10:52







        1




        1





        Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

        – FaxMax
        Dec 22 '17 at 10:48






        Sorry, you talk about the option -P and the you use -h to hide the filename? grep is (in this case) reading from stdin

        – FaxMax
        Dec 22 '17 at 10:48














        Corrected, wrong copy/paste. Thanks.

        – Kevin Lemaire
        Dec 22 '17 at 10:52





        Corrected, wrong copy/paste. Thanks.

        – Kevin Lemaire
        Dec 22 '17 at 10:52













        1














        Use



        echo ... | grep -Eo "sd[a-z]"


        where -E interprets the pattern as an (extended) regular expression and -o prints only the matching parts in each line.






        share|improve this answer


















        • 1





          That’s not an extended regular expression;  that command will work without the E option.

          – G-Man
          Apr 6 at 14:29















        1














        Use



        echo ... | grep -Eo "sd[a-z]"


        where -E interprets the pattern as an (extended) regular expression and -o prints only the matching parts in each line.






        share|improve this answer


















        • 1





          That’s not an extended regular expression;  that command will work without the E option.

          – G-Man
          Apr 6 at 14:29













        1












        1








        1







        Use



        echo ... | grep -Eo "sd[a-z]"


        where -E interprets the pattern as an (extended) regular expression and -o prints only the matching parts in each line.






        share|improve this answer













        Use



        echo ... | grep -Eo "sd[a-z]"


        where -E interprets the pattern as an (extended) regular expression and -o prints only the matching parts in each line.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 22 '17 at 10:48









        elmelm

        1134




        1134







        • 1





          That’s not an extended regular expression;  that command will work without the E option.

          – G-Man
          Apr 6 at 14:29












        • 1





          That’s not an extended regular expression;  that command will work without the E option.

          – G-Man
          Apr 6 at 14:29







        1




        1





        That’s not an extended regular expression;  that command will work without the E option.

        – G-Man
        Apr 6 at 14:29





        That’s not an extended regular expression;  that command will work without the E option.

        – G-Man
        Apr 6 at 14:29











        0














        echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' 
        "dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
        echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
        sdb
        sdc
        sdd
        sde
        sdf





        share|improve this answer



























          0














          echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' 
          "dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
          echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
          sdb
          sdc
          sdd
          sde
          sdf





          share|improve this answer

























            0












            0








            0







            echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' 
            "dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
            echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
            sdb
            sdc
            sdd
            sde
            sdf





            share|improve this answer













            echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' 
            "dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
            echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
            sdb
            sdc
            sdd
            sde
            sdf






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Dec 22 '17 at 10:37









            FaxMaxFaxMax

            443420




            443420





















                0














                You did not specify what x should be in sdX so one could as well assume that it might be any character:



                $ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
                sdb
                sdc
                sdd
                sde
                sdf


                A literal . means any character in regular expressions.



                And in perl because you wanted that explicitly:



                $ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
                sdb
                sdc
                sdd
                sde
                sdf





                share|improve this answer





























                  0














                  You did not specify what x should be in sdX so one could as well assume that it might be any character:



                  $ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
                  sdb
                  sdc
                  sdd
                  sde
                  sdf


                  A literal . means any character in regular expressions.



                  And in perl because you wanted that explicitly:



                  $ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
                  sdb
                  sdc
                  sdd
                  sde
                  sdf





                  share|improve this answer



























                    0












                    0








                    0







                    You did not specify what x should be in sdX so one could as well assume that it might be any character:



                    $ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
                    sdb
                    sdc
                    sdd
                    sde
                    sdf


                    A literal . means any character in regular expressions.



                    And in perl because you wanted that explicitly:



                    $ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
                    sdb
                    sdc
                    sdd
                    sde
                    sdf





                    share|improve this answer















                    You did not specify what x should be in sdX so one could as well assume that it might be any character:



                    $ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
                    sdb
                    sdc
                    sdd
                    sde
                    sdf


                    A literal . means any character in regular expressions.



                    And in perl because you wanted that explicitly:



                    $ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
                    sdb
                    sdc
                    sdd
                    sde
                    sdf






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Dec 22 '17 at 12:15

























                    answered Dec 22 '17 at 11:03









                    Arkadiusz DrabczykArkadiusz Drabczyk

                    8,33521836




                    8,33521836





















                        0














                        gnu sed:



                        $ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'

                        $ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'





                        share|improve this answer























                        • I do not get it

                          – Pierre.Vriens
                          Apr 6 at 13:55











                        • (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                          – G-Man
                          Apr 6 at 15:28











                        • (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                          – G-Man
                          Apr 6 at 15:28















                        0














                        gnu sed:



                        $ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'

                        $ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'





                        share|improve this answer























                        • I do not get it

                          – Pierre.Vriens
                          Apr 6 at 13:55











                        • (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                          – G-Man
                          Apr 6 at 15:28











                        • (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                          – G-Man
                          Apr 6 at 15:28













                        0












                        0








                        0







                        gnu sed:



                        $ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'

                        $ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'





                        share|improve this answer













                        gnu sed:



                        $ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'

                        $ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'






                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered Apr 6 at 13:35









                        abdanabdan

                        474




                        474












                        • I do not get it

                          – Pierre.Vriens
                          Apr 6 at 13:55











                        • (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                          – G-Man
                          Apr 6 at 15:28











                        • (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                          – G-Man
                          Apr 6 at 15:28

















                        • I do not get it

                          – Pierre.Vriens
                          Apr 6 at 13:55











                        • (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                          – G-Man
                          Apr 6 at 15:28











                        • (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                          – G-Man
                          Apr 6 at 15:28
















                        I do not get it

                        – Pierre.Vriens
                        Apr 6 at 13:55





                        I do not get it

                        – Pierre.Vriens
                        Apr 6 at 13:55













                        (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                        – G-Man
                        Apr 6 at 15:28





                        (1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked.  (2) Your command produces the correct expected result for the sample input.  So does printf '%sn' sdb sdc sdd sde sdf.  Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else.  … (Cont’d)

                        – G-Man
                        Apr 6 at 15:28













                        (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                        – G-Man
                        Apr 6 at 15:28





                        (Cont’d) … My point is that the same is true of your answer.  The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input.  It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague.  But you should state what assumptions you are making, especially when they are as broad as the ones you are making.

                        – G-Man
                        Apr 6 at 15:28











                        0














                        Above result is achieved by awk one liner



                        Done by below command



                        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'


                        output



                        echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
                        sdb
                        sdc
                        sdd
                        sde
                        sdf
                        praveen@praveen:~$





                        share|improve this answer



























                          0














                          Above result is achieved by awk one liner



                          Done by below command



                          echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'


                          output



                          echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
                          sdb
                          sdc
                          sdd
                          sde
                          sdf
                          praveen@praveen:~$





                          share|improve this answer

























                            0












                            0








                            0







                            Above result is achieved by awk one liner



                            Done by below command



                            echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'


                            output



                            echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
                            sdb
                            sdc
                            sdd
                            sde
                            sdf
                            praveen@praveen:~$





                            share|improve this answer













                            Above result is achieved by awk one liner



                            Done by below command



                            echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'


                            output



                            echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
                            sdb
                            sdc
                            sdd
                            sde
                            sdf
                            praveen@praveen:~$






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 2 days ago









                            Praveen Kumar BSPraveen Kumar BS

                            1,7541311




                            1,7541311



























                                draft saved

                                draft discarded
















































                                Thanks for contributing an answer to Unix & Linux Stack Exchange!


                                • 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%2funix.stackexchange.com%2fquestions%2f412456%2fhow-to-capture-specific-strings-from-line%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

                                getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

                                Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition

                                Marilyn Monroe Ny fiainany manokana | Jereo koa | Meny fitetezanafanitarana azy.