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;
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
add a comment |
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
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
add a comment |
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
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
sed
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
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
add a comment |
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.
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
add a comment |
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.
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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