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

What is this called? Old film camera viewer?What makes a good film camera?What to do with an old film camera?What should one look for when buying a used film camera?What is the value and age of this pre-1967 Ricoh 35 mm camera?DSLR recommendation, question about old Canon 35mm film Camera & lensesCan anyone identify the silver rangefinder-style camera in this advertisement?What kind of a Polaroid 600-camera is this?Will an old film camera still work even when not used in a very long time?What is this camera / Can I develop the film?How to fit an action camera into antique (bellows) housing?What to check when buying used and old film bodies?

Why is this plane circling around the Lucknow airport every day?Why do aircraft on Flight Radar 24 jump around randomly sometimes?What airport has this walkway over a taxiway?How does Chicago O'Hare's tower sequence aircraft at peak capacity?Which airport is featured in this Delta commercial?After a crash, for how long is the airport closed?Can a passenger plane stand still in the air, or hover at a fixed location above a ground?What are those trucks towing around, and why?What is this airport outside of Cairo, Egypt?Which US airport has the lowest circling MDH?What is this airport video?