What does the following number-processing sed code mean?A challenge for sed convert code from Mathematica to Matlabhow to modify matches to a regular expression with sed or another tool?sed insert in the beginning of multiple files is not workingExplanation for 'sed'How to use appropriate regex to find a pattern in awk?Bash numeric sort gives different results when columns are selected simultaneously vs. togethersed code understanding for text processingRemove a combination of numbers and symbols from a string using the $VARNAME//pattern/ waychange only part of the substring using sedWhen sed is used in an expect command, what is the proper way to escape the backslashes?

Multi tool use
Multi tool use

How to run a prison with the smallest amount of guards?

Anatomically Correct Strange Women In Ponds Distributing Swords

Pre-amplifier input protection

Do sorcerers' Subtle Spells require a skill check to be unseen?

India just shot down a satellite from the ground. At what altitude range is the resulting debris field?

How long to clear the 'suck zone' of a turbofan after start is initiated?

Would a high gravity rocky planet be guaranteed to have an atmosphere?

How to Reset Passwords on Multiple Websites Easily?

CREATE opcode: what does it really do?

Roman Numeral Treatment of Suspensions

Implement the Thanos sorting algorithm

How can we prove that any integral in the set of non-elementary integrals cannot be expressed in the form of elementary functions?

How can I kill an app using Terminal?

How do I find the solutions of the following equation?

Why didn't Theresa May consult with Parliament before negotiating a deal with the EU?

What is the opposite of 'gravitas'?

Is there a good way to store credentials outside of a password manager?

Is exact Kanji stroke length important?

How to pronounce the slash sign

What does the word "Atten" mean?

Two monoidal structures and copowering

Is `x >> pure y` equivalent to `liftM (const y) x`

Proof of work - lottery approach

Opposite of a diet



What does the following number-processing sed code mean?


A challenge for sed convert code from Mathematica to Matlabhow to modify matches to a regular expression with sed or another tool?sed insert in the beginning of multiple files is not workingExplanation for 'sed'How to use appropriate regex to find a pattern in awk?Bash numeric sort gives different results when columns are selected simultaneously vs. togethersed code understanding for text processingRemove a combination of numbers and symbols from a string using the $VARNAME//pattern/ waychange only part of the substring using sedWhen sed is used in an expect command, what is the proper way to escape the backslashes?













-1















I came across a code in script which add ',' after every 3 digits from backwards. the code only considers numeric data.



Following is the code.



sed 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' number.txt


number.txt



1234
12345
123456


output



1,234
12,345
123,456
1234,567


Can anyone explain the code flow..










share|improve this question









New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

    – Jeff Schaller
    yesterday















-1















I came across a code in script which add ',' after every 3 digits from backwards. the code only considers numeric data.



Following is the code.



sed 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' number.txt


number.txt



1234
12345
123456


output



1,234
12,345
123,456
1234,567


Can anyone explain the code flow..










share|improve this question









New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

    – Jeff Schaller
    yesterday













-1












-1








-1








I came across a code in script which add ',' after every 3 digits from backwards. the code only considers numeric data.



Following is the code.



sed 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' number.txt


number.txt



1234
12345
123456


output



1,234
12,345
123,456
1234,567


Can anyone explain the code flow..










share|improve this question









New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I came across a code in script which add ',' after every 3 digits from backwards. the code only considers numeric data.



Following is the code.



sed 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' number.txt


number.txt



1234
12345
123456


output



1,234
12,345
123,456
1234,567


Can anyone explain the code flow..







sed regular-expression numeric-data






share|improve this question









New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









Jeff Schaller

44k1161142




44k1161142






New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









Dhaval kaleDhaval kale

1




1




New contributor




Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Dhaval kale is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1





    You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

    – Jeff Schaller
    yesterday












  • 1





    You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

    – Jeff Schaller
    yesterday







1




1





You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

– Jeff Schaller
yesterday





You appear to know what the code does; there's no branching, and only one command. Where does your misunderstanding come in?

– Jeff Schaller
yesterday










3 Answers
3






active

oldest

votes


















3














sed (the stream editor) can operate in search and replace mode using regular expressions. There is a bit of sed-specific escaping going on, but for the regex itself, you can confer the explanation tool from regexr:



( Capturing group #1. Groups multiple tokens
together and creates a capture group for extracting a substring or using
a backreference.



^ Beginning. Matches the beginning of the
string.



| Alternation. Acts like a boolean OR. Matches
the expression before or after the |.



[^ Negated set. Match any character that is not
in the set.



0-9 Range. Matches a character in the range "0"
to "9". Case sensitive.



. Character. Matches a "." character.



]



)



( Capturing group #2. Groups multiple tokens
together and creates a capture group for extracting a substring or using
a backreference.



[ Character set. Match any character in the set.



0-9 Range. Matches a character in the range "0"
to "9". Case sensitive.



]



+ Quantifier. Match 1 or more of the preceding
token.



)



( Capturing group #3. Groups multiple tokens
together and creates a capture group for extracting a substring or using
a backreference.



[ Character set. Match any character in the set.



0-9 Range. Matches a character in the range "0"
to "9". Case sensitive.



]



3 Quantifier. Match 3 of the preceding token.



)






share|improve this answer




















  • 1





    ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

    – αғsнιη
    yesterday












  • No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

    – Hermann
    yesterday


















1














The pattern captures (1) the start of line or something that is not a digit nor a dot, followed by (2) any number of digits, at least one, followed by (3) exactly three digits.
It then puts them back with a comma between (2) and (3), in effect adding one thousands separator. The first group is only required to avoid touching fractional parts after a decimal point, since we don't want 1.2345 to turn into 1.2,345.



Note that the pattern is written in basic regular expressions (BRE), requiring backslashes in front of each () and to make them special. Moreover, it requires GNU sed, where + and | also have special meanings in BRE as an extension. The command would be better written as an extended regular expression (sed -E is supported by many sed implementations):



sed -E 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g'


Also, the pattern only does one replacement, it does not add multiple thousand separators to the same number. The /g at the end will match multiple times on the same line, but it doesn't process already replaced data. 1234567 will become 1234,567, not 1,234,567. To fix that, we'll need to add a loop:



sed -E -e :a -e 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' -e ta


Here, :a is just a label, and the final ta tests for a successful replacement, and jumps back to a if a replacement was done, in effect repeating the process as many times as it does something. Hence 1234567 will turn into 1,234,567.






share|improve this answer






























    1















    • sed 's/foo/bar/g' number.txt: This reads the file number.txt, and replaces the regex pattern foo with bar. This will occur for all matches on each line (/g).


    • (^|[^0-9.])([0-9]+)([0-9]3): This is the pattern to replace. Each part in the escaped parentheses (…) is a "capturing group". The pattern inside is "captured" for later use.


      • (^|[^0-9.]): Find the beginning of the line ^ or | a character that is not a numeral or period [^0-9.]. This essentially finds the character preceding a number.


      • ([0-9]+): Find one or more numerals [0-9]+.


      • ([0-9]3): Find 3 numerals [0-9]3.



    • 12,3: replace the above matches with the first two capturing groups followed by , then the last capturing group. In other words, insert , between the second and third patterns.

    Because sed is "greedy", it will try to maximise the length of the match. Hence the final capturing group will be the last three numerals in the number.



    N.B. many of the "special" characters are escaped with , e.g. (…) and 3. If your sed supported "extended regular expressions" with -E or -r, then you would not have to escape these. This would improve readability.






    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
      );



      );






      Dhaval kale is a new contributor. Be nice, and check out our Code of Conduct.









      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f508697%2fwhat-does-the-following-number-processing-sed-code-mean%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      3














      sed (the stream editor) can operate in search and replace mode using regular expressions. There is a bit of sed-specific escaping going on, but for the regex itself, you can confer the explanation tool from regexr:



      ( Capturing group #1. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      ^ Beginning. Matches the beginning of the
      string.



      | Alternation. Acts like a boolean OR. Matches
      the expression before or after the |.



      [^ Negated set. Match any character that is not
      in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      . Character. Matches a "." character.



      ]



      )



      ( Capturing group #2. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      + Quantifier. Match 1 or more of the preceding
      token.



      )



      ( Capturing group #3. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      3 Quantifier. Match 3 of the preceding token.



      )






      share|improve this answer




















      • 1





        ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

        – αғsнιη
        yesterday












      • No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

        – Hermann
        yesterday















      3














      sed (the stream editor) can operate in search and replace mode using regular expressions. There is a bit of sed-specific escaping going on, but for the regex itself, you can confer the explanation tool from regexr:



      ( Capturing group #1. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      ^ Beginning. Matches the beginning of the
      string.



      | Alternation. Acts like a boolean OR. Matches
      the expression before or after the |.



      [^ Negated set. Match any character that is not
      in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      . Character. Matches a "." character.



      ]



      )



      ( Capturing group #2. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      + Quantifier. Match 1 or more of the preceding
      token.



      )



      ( Capturing group #3. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      3 Quantifier. Match 3 of the preceding token.



      )






      share|improve this answer




















      • 1





        ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

        – αғsнιη
        yesterday












      • No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

        – Hermann
        yesterday













      3












      3








      3







      sed (the stream editor) can operate in search and replace mode using regular expressions. There is a bit of sed-specific escaping going on, but for the regex itself, you can confer the explanation tool from regexr:



      ( Capturing group #1. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      ^ Beginning. Matches the beginning of the
      string.



      | Alternation. Acts like a boolean OR. Matches
      the expression before or after the |.



      [^ Negated set. Match any character that is not
      in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      . Character. Matches a "." character.



      ]



      )



      ( Capturing group #2. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      + Quantifier. Match 1 or more of the preceding
      token.



      )



      ( Capturing group #3. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      3 Quantifier. Match 3 of the preceding token.



      )






      share|improve this answer















      sed (the stream editor) can operate in search and replace mode using regular expressions. There is a bit of sed-specific escaping going on, but for the regex itself, you can confer the explanation tool from regexr:



      ( Capturing group #1. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      ^ Beginning. Matches the beginning of the
      string.



      | Alternation. Acts like a boolean OR. Matches
      the expression before or after the |.



      [^ Negated set. Match any character that is not
      in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      . Character. Matches a "." character.



      ]



      )



      ( Capturing group #2. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      + Quantifier. Match 1 or more of the preceding
      token.



      )



      ( Capturing group #3. Groups multiple tokens
      together and creates a capture group for extracting a substring or using
      a backreference.



      [ Character set. Match any character in the set.



      0-9 Range. Matches a character in the range "0"
      to "9". Case sensitive.



      ]



      3 Quantifier. Match 3 of the preceding token.



      )







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited yesterday









      Jeff Schaller

      44k1161142




      44k1161142










      answered yesterday









      HermannHermann

      957515




      957515







      • 1





        ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

        – αғsнιη
        yesterday












      • No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

        – Hermann
        yesterday












      • 1





        ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

        – αғsнιη
        yesterday












      • No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

        – Hermann
        yesterday







      1




      1





      ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

      – αғsнιη
      yesterday






      ... "0-9 Range. Matches a character in the range "0" to "9". Case sensitive"; By Case sensitive, you mean English digits? or?

      – αғsнιη
      yesterday














      No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

      – Hermann
      yesterday





      No, case sensitive means big and small letters make a difference. Regular expressions are usually case sensitive (unless configured otherwise e.g. an i switch). In this particular case, the character set only contains digits. They have big and small variants so the case sensitivity does not actually matter. This is the output as given by regexr – feel free to try it. The explanation tool is quite interactive.

      – Hermann
      yesterday













      1














      The pattern captures (1) the start of line or something that is not a digit nor a dot, followed by (2) any number of digits, at least one, followed by (3) exactly three digits.
      It then puts them back with a comma between (2) and (3), in effect adding one thousands separator. The first group is only required to avoid touching fractional parts after a decimal point, since we don't want 1.2345 to turn into 1.2,345.



      Note that the pattern is written in basic regular expressions (BRE), requiring backslashes in front of each () and to make them special. Moreover, it requires GNU sed, where + and | also have special meanings in BRE as an extension. The command would be better written as an extended regular expression (sed -E is supported by many sed implementations):



      sed -E 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g'


      Also, the pattern only does one replacement, it does not add multiple thousand separators to the same number. The /g at the end will match multiple times on the same line, but it doesn't process already replaced data. 1234567 will become 1234,567, not 1,234,567. To fix that, we'll need to add a loop:



      sed -E -e :a -e 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' -e ta


      Here, :a is just a label, and the final ta tests for a successful replacement, and jumps back to a if a replacement was done, in effect repeating the process as many times as it does something. Hence 1234567 will turn into 1,234,567.






      share|improve this answer



























        1














        The pattern captures (1) the start of line or something that is not a digit nor a dot, followed by (2) any number of digits, at least one, followed by (3) exactly three digits.
        It then puts them back with a comma between (2) and (3), in effect adding one thousands separator. The first group is only required to avoid touching fractional parts after a decimal point, since we don't want 1.2345 to turn into 1.2,345.



        Note that the pattern is written in basic regular expressions (BRE), requiring backslashes in front of each () and to make them special. Moreover, it requires GNU sed, where + and | also have special meanings in BRE as an extension. The command would be better written as an extended regular expression (sed -E is supported by many sed implementations):



        sed -E 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g'


        Also, the pattern only does one replacement, it does not add multiple thousand separators to the same number. The /g at the end will match multiple times on the same line, but it doesn't process already replaced data. 1234567 will become 1234,567, not 1,234,567. To fix that, we'll need to add a loop:



        sed -E -e :a -e 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' -e ta


        Here, :a is just a label, and the final ta tests for a successful replacement, and jumps back to a if a replacement was done, in effect repeating the process as many times as it does something. Hence 1234567 will turn into 1,234,567.






        share|improve this answer

























          1












          1








          1







          The pattern captures (1) the start of line or something that is not a digit nor a dot, followed by (2) any number of digits, at least one, followed by (3) exactly three digits.
          It then puts them back with a comma between (2) and (3), in effect adding one thousands separator. The first group is only required to avoid touching fractional parts after a decimal point, since we don't want 1.2345 to turn into 1.2,345.



          Note that the pattern is written in basic regular expressions (BRE), requiring backslashes in front of each () and to make them special. Moreover, it requires GNU sed, where + and | also have special meanings in BRE as an extension. The command would be better written as an extended regular expression (sed -E is supported by many sed implementations):



          sed -E 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g'


          Also, the pattern only does one replacement, it does not add multiple thousand separators to the same number. The /g at the end will match multiple times on the same line, but it doesn't process already replaced data. 1234567 will become 1234,567, not 1,234,567. To fix that, we'll need to add a loop:



          sed -E -e :a -e 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' -e ta


          Here, :a is just a label, and the final ta tests for a successful replacement, and jumps back to a if a replacement was done, in effect repeating the process as many times as it does something. Hence 1234567 will turn into 1,234,567.






          share|improve this answer













          The pattern captures (1) the start of line or something that is not a digit nor a dot, followed by (2) any number of digits, at least one, followed by (3) exactly three digits.
          It then puts them back with a comma between (2) and (3), in effect adding one thousands separator. The first group is only required to avoid touching fractional parts after a decimal point, since we don't want 1.2345 to turn into 1.2,345.



          Note that the pattern is written in basic regular expressions (BRE), requiring backslashes in front of each () and to make them special. Moreover, it requires GNU sed, where + and | also have special meanings in BRE as an extension. The command would be better written as an extended regular expression (sed -E is supported by many sed implementations):



          sed -E 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g'


          Also, the pattern only does one replacement, it does not add multiple thousand separators to the same number. The /g at the end will match multiple times on the same line, but it doesn't process already replaced data. 1234567 will become 1234,567, not 1,234,567. To fix that, we'll need to add a loop:



          sed -E -e :a -e 's/(^|[^0-9.])([0-9]+)([0-9]3)/12,3/g' -e ta


          Here, :a is just a label, and the final ta tests for a successful replacement, and jumps back to a if a replacement was done, in effect repeating the process as many times as it does something. Hence 1234567 will turn into 1,234,567.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered yesterday









          ilkkachuilkkachu

          62.8k10103180




          62.8k10103180





















              1















              • sed 's/foo/bar/g' number.txt: This reads the file number.txt, and replaces the regex pattern foo with bar. This will occur for all matches on each line (/g).


              • (^|[^0-9.])([0-9]+)([0-9]3): This is the pattern to replace. Each part in the escaped parentheses (…) is a "capturing group". The pattern inside is "captured" for later use.


                • (^|[^0-9.]): Find the beginning of the line ^ or | a character that is not a numeral or period [^0-9.]. This essentially finds the character preceding a number.


                • ([0-9]+): Find one or more numerals [0-9]+.


                • ([0-9]3): Find 3 numerals [0-9]3.



              • 12,3: replace the above matches with the first two capturing groups followed by , then the last capturing group. In other words, insert , between the second and third patterns.

              Because sed is "greedy", it will try to maximise the length of the match. Hence the final capturing group will be the last three numerals in the number.



              N.B. many of the "special" characters are escaped with , e.g. (…) and 3. If your sed supported "extended regular expressions" with -E or -r, then you would not have to escape these. This would improve readability.






              share|improve this answer





























                1















                • sed 's/foo/bar/g' number.txt: This reads the file number.txt, and replaces the regex pattern foo with bar. This will occur for all matches on each line (/g).


                • (^|[^0-9.])([0-9]+)([0-9]3): This is the pattern to replace. Each part in the escaped parentheses (…) is a "capturing group". The pattern inside is "captured" for later use.


                  • (^|[^0-9.]): Find the beginning of the line ^ or | a character that is not a numeral or period [^0-9.]. This essentially finds the character preceding a number.


                  • ([0-9]+): Find one or more numerals [0-9]+.


                  • ([0-9]3): Find 3 numerals [0-9]3.



                • 12,3: replace the above matches with the first two capturing groups followed by , then the last capturing group. In other words, insert , between the second and third patterns.

                Because sed is "greedy", it will try to maximise the length of the match. Hence the final capturing group will be the last three numerals in the number.



                N.B. many of the "special" characters are escaped with , e.g. (…) and 3. If your sed supported "extended regular expressions" with -E or -r, then you would not have to escape these. This would improve readability.






                share|improve this answer



























                  1












                  1








                  1








                  • sed 's/foo/bar/g' number.txt: This reads the file number.txt, and replaces the regex pattern foo with bar. This will occur for all matches on each line (/g).


                  • (^|[^0-9.])([0-9]+)([0-9]3): This is the pattern to replace. Each part in the escaped parentheses (…) is a "capturing group". The pattern inside is "captured" for later use.


                    • (^|[^0-9.]): Find the beginning of the line ^ or | a character that is not a numeral or period [^0-9.]. This essentially finds the character preceding a number.


                    • ([0-9]+): Find one or more numerals [0-9]+.


                    • ([0-9]3): Find 3 numerals [0-9]3.



                  • 12,3: replace the above matches with the first two capturing groups followed by , then the last capturing group. In other words, insert , between the second and third patterns.

                  Because sed is "greedy", it will try to maximise the length of the match. Hence the final capturing group will be the last three numerals in the number.



                  N.B. many of the "special" characters are escaped with , e.g. (…) and 3. If your sed supported "extended regular expressions" with -E or -r, then you would not have to escape these. This would improve readability.






                  share|improve this answer
















                  • sed 's/foo/bar/g' number.txt: This reads the file number.txt, and replaces the regex pattern foo with bar. This will occur for all matches on each line (/g).


                  • (^|[^0-9.])([0-9]+)([0-9]3): This is the pattern to replace. Each part in the escaped parentheses (…) is a "capturing group". The pattern inside is "captured" for later use.


                    • (^|[^0-9.]): Find the beginning of the line ^ or | a character that is not a numeral or period [^0-9.]. This essentially finds the character preceding a number.


                    • ([0-9]+): Find one or more numerals [0-9]+.


                    • ([0-9]3): Find 3 numerals [0-9]3.



                  • 12,3: replace the above matches with the first two capturing groups followed by , then the last capturing group. In other words, insert , between the second and third patterns.

                  Because sed is "greedy", it will try to maximise the length of the match. Hence the final capturing group will be the last three numerals in the number.



                  N.B. many of the "special" characters are escaped with , e.g. (…) and 3. If your sed supported "extended regular expressions" with -E or -r, then you would not have to escape these. This would improve readability.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited yesterday

























                  answered yesterday









                  SparhawkSparhawk

                  10.2k744101




                  10.2k744101




















                      Dhaval kale is a new contributor. Be nice, and check out our Code of Conduct.









                      draft saved

                      draft discarded


















                      Dhaval kale is a new contributor. Be nice, and check out our Code of Conduct.












                      Dhaval kale is a new contributor. Be nice, and check out our Code of Conduct.











                      Dhaval kale is a new contributor. Be nice, and check out our Code of Conduct.














                      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%2f508697%2fwhat-does-the-following-number-processing-sed-code-mean%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







                      br,mQ,eBqIZsZYQPidNdGC3O99p0oKo,lCJ3Z2Lh,K,mMANY8EAaIGe2iwRx TKdew3e8mxrtP,8xxuXDxAbd,VD
                      m IYwcueD5 a 4ulr9wIe9hbNmzk,vIbL

                      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

                      NetworkManager fails with “Could not find source connection”Trouble connecting to VPN using network-manager, while command line worksHow can I be notified about state changes to a VPN adapterBacktrack 5 R3 - Refuses to connect to VPNFeed all traffic through OpenVPN for a specific network namespace onlyRun daemon on startup in Debian once openvpn connection establishedpfsense tcp connection between openvpn and lan is brokenInternet connection problem with web browsers onlyWhy does NetworkManager explicitly support tun/tap devices?Browser issues with VPNTwo IP addresses assigned to the same network card - OpenVPN issues?Cannot connect to WiFi with nmcli, although secrets are provided

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