Sed: replace particular one/two digit(s) 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 Results Why I closed the “Why is Kali so hard” questionsed or tr one-liner to delete all numeric digitsUsing sed to replace characters between two patternsReplace multiline string in filesCoordinates X237595Y81600 to X2375Y8160Remove and replace between two specific strings using sed commandSed: replace text keeping digit occurrenceExchanging One Column From File1 with files from File2advanced sed print + replaceTwo sed commands in one commandAWK printing columns based on column number and pattern match condition

Keep going mode for require-package

Is there folklore associating late breastfeeding with low intelligence and/or gullibility?

Did the new image of black hole confirm the general theory of relativity?

Can smartphones with the same camera sensor have different image quality?

Cold is to Refrigerator as warm is to?

Is there a service that would inform me whenever a new direct route is scheduled from a given airport?

Why does this iterative way of solving of equation work?

Should you tell Jews they are breaking a commandment?

Classification of bundles, Postnikov towers, obstruction theory, local coefficients

How to politely respond to generic emails requesting a PhD/job in my lab? Without wasting too much time

What would be Julian Assange's expected punishment, on the current English criminal law?

Statistical model of ligand substitution

How can I make names more distinctive without making them longer?

How are presidential pardons supposed to be used?

Using "nakedly" instead of "with nothing on"

Complexity of many constant time steps with occasional logarithmic steps

Is it possible to ask for a hotel room without minibar/extra services?

Area of a 2D convex hull

Unexpected result with right shift after bitwise negation

Strange behaviour of Check

Does a C shift expression have unsigned type? Why would Splint warn about a right-shift?

Determine whether f is a function, an injection, a surjection

Can a monk deflect thrown melee weapons?

Estimated State payment too big --> money back; + 2018 Tax Reform



Sed: replace particular one/two digit(s)



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 Results
Why I closed the “Why is Kali so hard” questionsed or tr one-liner to delete all numeric digitsUsing sed to replace characters between two patternsReplace multiline string in filesCoordinates X237595Y81600 to X2375Y8160Remove and replace between two specific strings using sed commandSed: replace text keeping digit occurrenceExchanging One Column From File1 with files from File2advanced sed print + replaceTwo sed commands in one commandAWK printing columns based on column number and pattern match condition



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








2















I have data in a table. And in one column I need to replace some indices (numbers from 1 to 23) to 3-4 digits sample numbers like: 2347,3856 etc.



So the original column looks like:



SF=1,2
SF=12,7
SF=17,4


And the output should be:



SF=2347,3856
SF=8553,9539
...


The problem is: if I do it for one sample (1->2720) it's fine; but then replacing 2 with something will create a mess etc., and I don't see how can I specify that the number should be replaced if only it's a single(two) digit for example?
There could be more than 2 numbers in a row.



Sorry if it sounds confusing. I'm a beginner.



Update. Thanks fo mgjk I succeeded partially. But for some reason the new line is created after the first replacement in a row and then the next number is not replaced obviously. So what I get is:



SF=2347


,2



SF=8553


,7



And here is the code:



'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt'



Why does it happen?










share|improve this question



















  • 6





    Please provide also expected output so that we get a better idea of what you are trying to achieve.

    – peterph
    Oct 2 '14 at 13:26

















2















I have data in a table. And in one column I need to replace some indices (numbers from 1 to 23) to 3-4 digits sample numbers like: 2347,3856 etc.



So the original column looks like:



SF=1,2
SF=12,7
SF=17,4


And the output should be:



SF=2347,3856
SF=8553,9539
...


The problem is: if I do it for one sample (1->2720) it's fine; but then replacing 2 with something will create a mess etc., and I don't see how can I specify that the number should be replaced if only it's a single(two) digit for example?
There could be more than 2 numbers in a row.



Sorry if it sounds confusing. I'm a beginner.



Update. Thanks fo mgjk I succeeded partially. But for some reason the new line is created after the first replacement in a row and then the next number is not replaced obviously. So what I get is:



SF=2347


,2



SF=8553


,7



And here is the code:



'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt'



Why does it happen?










share|improve this question



















  • 6





    Please provide also expected output so that we get a better idea of what you are trying to achieve.

    – peterph
    Oct 2 '14 at 13:26













2












2








2








I have data in a table. And in one column I need to replace some indices (numbers from 1 to 23) to 3-4 digits sample numbers like: 2347,3856 etc.



So the original column looks like:



SF=1,2
SF=12,7
SF=17,4


And the output should be:



SF=2347,3856
SF=8553,9539
...


The problem is: if I do it for one sample (1->2720) it's fine; but then replacing 2 with something will create a mess etc., and I don't see how can I specify that the number should be replaced if only it's a single(two) digit for example?
There could be more than 2 numbers in a row.



Sorry if it sounds confusing. I'm a beginner.



Update. Thanks fo mgjk I succeeded partially. But for some reason the new line is created after the first replacement in a row and then the next number is not replaced obviously. So what I get is:



SF=2347


,2



SF=8553


,7



And here is the code:



'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt'



Why does it happen?










share|improve this question
















I have data in a table. And in one column I need to replace some indices (numbers from 1 to 23) to 3-4 digits sample numbers like: 2347,3856 etc.



So the original column looks like:



SF=1,2
SF=12,7
SF=17,4


And the output should be:



SF=2347,3856
SF=8553,9539
...


The problem is: if I do it for one sample (1->2720) it's fine; but then replacing 2 with something will create a mess etc., and I don't see how can I specify that the number should be replaced if only it's a single(two) digit for example?
There could be more than 2 numbers in a row.



Sorry if it sounds confusing. I'm a beginner.



Update. Thanks fo mgjk I succeeded partially. But for some reason the new line is created after the first replacement in a row and then the next number is not replaced obviously. So what I get is:



SF=2347


,2



SF=8553


,7



And here is the code:



'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt'



Why does it happen?







sed






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 17 hours ago









Rui F Ribeiro

42.1k1483142




42.1k1483142










asked Oct 2 '14 at 13:21









EugenieEugenie

112




112







  • 6





    Please provide also expected output so that we get a better idea of what you are trying to achieve.

    – peterph
    Oct 2 '14 at 13:26












  • 6





    Please provide also expected output so that we get a better idea of what you are trying to achieve.

    – peterph
    Oct 2 '14 at 13:26







6




6





Please provide also expected output so that we get a better idea of what you are trying to achieve.

– peterph
Oct 2 '14 at 13:26





Please provide also expected output so that we get a better idea of what you are trying to achieve.

– peterph
Oct 2 '14 at 13:26










1 Answer
1






active

oldest

votes


















3














I think, you're trying to do something like this:



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4


Including the literal '=' and ',' in your pattern and replacement string would let you distinguish between a "=1," and an "=12,"




Update:



To replace both variables, in sed, you can use a $ to match the end of the line.



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4


It's going to look weird when you have bash variables like $var mixed in, but it should work, provided you use double-quotes:



e.g.,



$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=$a,/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4


As an aside, if your replacements are huge, you can clean all this up using files in sed. E.g,



$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g


Then run the file against the data



$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4


The downside to the files is that I don't know any way to use variables in them.






share|improve this answer

























  • Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

    – Eugenie
    Oct 7 '14 at 13:21











  • sorry I don't see how to mark the code...

    – Eugenie
    Oct 7 '14 at 13:22











  • Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

    – Eugenie
    Oct 8 '14 at 13:40











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%2f158865%2fsed-replace-particular-one-two-digits%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









3














I think, you're trying to do something like this:



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4


Including the literal '=' and ',' in your pattern and replacement string would let you distinguish between a "=1," and an "=12,"




Update:



To replace both variables, in sed, you can use a $ to match the end of the line.



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4


It's going to look weird when you have bash variables like $var mixed in, but it should work, provided you use double-quotes:



e.g.,



$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=$a,/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4


As an aside, if your replacements are huge, you can clean all this up using files in sed. E.g,



$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g


Then run the file against the data



$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4


The downside to the files is that I don't know any way to use variables in them.






share|improve this answer

























  • Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

    – Eugenie
    Oct 7 '14 at 13:21











  • sorry I don't see how to mark the code...

    – Eugenie
    Oct 7 '14 at 13:22











  • Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

    – Eugenie
    Oct 8 '14 at 13:40















3














I think, you're trying to do something like this:



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4


Including the literal '=' and ',' in your pattern and replacement string would let you distinguish between a "=1," and an "=12,"




Update:



To replace both variables, in sed, you can use a $ to match the end of the line.



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4


It's going to look weird when you have bash variables like $var mixed in, but it should work, provided you use double-quotes:



e.g.,



$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=$a,/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4


As an aside, if your replacements are huge, you can clean all this up using files in sed. E.g,



$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g


Then run the file against the data



$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4


The downside to the files is that I don't know any way to use variables in them.






share|improve this answer

























  • Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

    – Eugenie
    Oct 7 '14 at 13:21











  • sorry I don't see how to mark the code...

    – Eugenie
    Oct 7 '14 at 13:22











  • Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

    – Eugenie
    Oct 8 '14 at 13:40













3












3








3







I think, you're trying to do something like this:



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4


Including the literal '=' and ',' in your pattern and replacement string would let you distinguish between a "=1," and an "=12,"




Update:



To replace both variables, in sed, you can use a $ to match the end of the line.



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4


It's going to look weird when you have bash variables like $var mixed in, but it should work, provided you use double-quotes:



e.g.,



$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=$a,/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4


As an aside, if your replacements are huge, you can clean all this up using files in sed. E.g,



$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g


Then run the file against the data



$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4


The downside to the files is that I don't know any way to use variables in them.






share|improve this answer















I think, you're trying to do something like this:



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4


Including the literal '=' and ',' in your pattern and replacement string would let you distinguish between a "=1," and an "=12,"




Update:



To replace both variables, in sed, you can use a $ to match the end of the line.



$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4


It's going to look weird when you have bash variables like $var mixed in, but it should work, provided you use double-quotes:



e.g.,



$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=$a,/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4


As an aside, if your replacements are huge, you can clean all this up using files in sed. E.g,



$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g


Then run the file against the data



$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4


The downside to the files is that I don't know any way to use variables in them.







share|improve this answer














share|improve this answer



share|improve this answer








edited Oct 7 '14 at 14:00

























answered Oct 2 '14 at 13:38









mgjkmgjk

336719




336719












  • Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

    – Eugenie
    Oct 7 '14 at 13:21











  • sorry I don't see how to mark the code...

    – Eugenie
    Oct 7 '14 at 13:22











  • Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

    – Eugenie
    Oct 8 '14 at 13:40

















  • Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

    – Eugenie
    Oct 7 '14 at 13:21











  • sorry I don't see how to mark the code...

    – Eugenie
    Oct 7 '14 at 13:22











  • Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

    – Eugenie
    Oct 8 '14 at 13:40
















Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

– Eugenie
Oct 7 '14 at 13:21





Thank you so much! It works;) My only problem now is how to make several replacements in one line. If I do it like: 'sed "s/=$index,/=$sample,/g; s/,$index /,$sample /g; s/,$index,/,$sample,/g" samples.txt' then it makes a new line after the first number replaced and don't change the rest...

– Eugenie
Oct 7 '14 at 13:21













sorry I don't see how to mark the code...

– Eugenie
Oct 7 '14 at 13:22





sorry I don't see how to mark the code...

– Eugenie
Oct 7 '14 at 13:22













Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

– Eugenie
Oct 8 '14 at 13:40





Thank you very much for such explicit answer, mgjk! I didn't know about the possibility to use .sed script and it's really nice. But I am still trying to cope with last numbers... The thing is it is just one column from a table. And it seems there is no way to match the end of text in a column (which is not the end of line really). Probably I should extract this column, make replacements and then merge with a rest. Thank you so much for your support!

– Eugenie
Oct 8 '14 at 13:40

















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%2f158865%2fsed-replace-particular-one-two-digits%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







-sed

Popular posts from this blog

Creating 100m^2 grid automatically using QGIS?Creating grid constrained within polygon in QGIS?Createing polygon layer from point data using QGIS?Creating vector grid using QGIS?Creating grid polygons from coordinates using R or PythonCreating grid from spatio temporal point data?Creating fields in attributes table using other layers using QGISCreate .shp vector grid in QGISQGIS Creating 4km point grid within polygonsCreate a vector grid over a raster layerVector Grid Creates just one grid

Word for a person who has no opinion about whether god existsWord for having a definite opinion while simultaneously withholding judgment?What's the opposite of “newcomer? Is ”veteran" OK?What do you call an “atheist” who might believe in an afterlife?What's a word for someone who wants to voice opinions but not have them challenged?Word for someone who dismisses contrary opinions as irrational?Somone who thinks they are overly special/out of the ordinaryIs there a word, phrase or idiom for “a person who is incapable of thinking about the future”?The belief that a god is human-likeA word for a non-famous person/thing you have heard a lot aboutAdjective for a person who enjoys taking care of their appearance

Can I redirect output to a log file and background a process at the same time?2019 Community Moderator ElectionUnable to write to file in shell script when running command in backgroundredirect and log script outputhow to properly log the output of a console program that frequently updates “parts” of the screen, resulting in a messy log file?How can I redirect the output of a child process?grep script - output lines at the same time into echoHow to run process in background and get its pid to create log file nameHow to redirect output to a log from expect commandHow to clear a redirect log file content in shell?Log background jobs started in all the manually started shells?Why do `jobs` and `dirs` run in command subsitution, process substitution, pipeline, and background jobs output the same as in original shell?How to redirect output to file to STDOUT?