Need regex to replace the whole line, but the last optional character The 2019 Stack Overflow Developer Survey Results Are InReplace a character except last x occurrencesHow do I join the next line when a line matches a regex for whole document in VI?Why don't I need to escape a character class in sed but I need to escape the rest?Sed command that would ignore any commented matchCommand line tool for easy multiline regex search and replaceWhy doesn't the '?' regex character produce a match in sed?Regex to match beginning and end of line in Vim (quote around whole line)How to make a (sed) regex replacing all occurances of one character while deleting the last?Regex Pattern and Replace line with substitutionvim: command for removing semicolon if it is the last character of the line
Why didn't the Event Horizon Telescope team mention Sagittarius A*?
What is the closest word meaning "respect for time / mindful"
Are there incongruent pythagorean triangles with the same perimeter and same area?
Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?
What could be the right powersource for 15 seconds lifespan disposable giant chainsaw?
FPGA - DIY Programming
How to deal with fear of taking dependencies
Where to refill my bottle in India?
Have you ever entered Singapore using a different passport or name?
What do the Banks children have against barley water?
Why isn't airport relocation done gradually?
What is the meaning of the verb "bear" in this context?
Identify boardgame from Big movie
What to do when moving next to a bird sanctuary with a loosely-domesticated cat?
Can you compress metal and what would be the consequences?
Are spiders unable to hurt humans, especially very small spiders?
Do these rules for Critical Successes and Critical Failures seem Fair?
How to notate time signature switching consistently every measure
Why is the Constellation's nose gear so long?
Why not take a picture of a closer black hole?
Lightning Grid - Columns and Rows?
Is there any way to tell whether the shot is going to hit you or not?
Is an up-to-date browser secure on an out-of-date OS?
Is three citations per paragraph excessive for undergraduate research paper?
Need regex to replace the whole line, but the last optional character
The 2019 Stack Overflow Developer Survey Results Are InReplace a character except last x occurrencesHow do I join the next line when a line matches a regex for whole document in VI?Why don't I need to escape a character class in sed but I need to escape the rest?Sed command that would ignore any commented matchCommand line tool for easy multiline regex search and replaceWhy doesn't the '?' regex character produce a match in sed?Regex to match beginning and end of line in Vim (quote around whole line)How to make a (sed) regex replacing all occurances of one character while deleting the last?Regex Pattern and Replace line with substitutionvim: command for removing semicolon if it is the last character of the line
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
It sounds like it should be trivial task, but I cannot figure it out, so I decided to ask. I need to replace the whole line, but optional last character. For instance, I want:abcd
to become efgh
butabcd,
to become efgh,
How can I create regex like that? It seems optional character cannot be back-referenced, i.e something like: s/.*(,)?$/efgh1
won't work (I tried :) )
To make it clear, the lines are arbitrary length with arbitrary characters. The only condition in my case is to preserve comma at the end of the line after the replacement if one existed there or drop it if line did not end up with comma
regular-expression
New contributor
add a comment |
It sounds like it should be trivial task, but I cannot figure it out, so I decided to ask. I need to replace the whole line, but optional last character. For instance, I want:abcd
to become efgh
butabcd,
to become efgh,
How can I create regex like that? It seems optional character cannot be back-referenced, i.e something like: s/.*(,)?$/efgh1
won't work (I tried :) )
To make it clear, the lines are arbitrary length with arbitrary characters. The only condition in my case is to preserve comma at the end of the line after the replacement if one existed there or drop it if line did not end up with comma
regular-expression
New contributor
1
Any length lines? Alwaysabcd
? Always a comma? How do we tell whether or not the last character should be kept?
– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.
– Torin
2 days ago
add a comment |
It sounds like it should be trivial task, but I cannot figure it out, so I decided to ask. I need to replace the whole line, but optional last character. For instance, I want:abcd
to become efgh
butabcd,
to become efgh,
How can I create regex like that? It seems optional character cannot be back-referenced, i.e something like: s/.*(,)?$/efgh1
won't work (I tried :) )
To make it clear, the lines are arbitrary length with arbitrary characters. The only condition in my case is to preserve comma at the end of the line after the replacement if one existed there or drop it if line did not end up with comma
regular-expression
New contributor
It sounds like it should be trivial task, but I cannot figure it out, so I decided to ask. I need to replace the whole line, but optional last character. For instance, I want:abcd
to become efgh
butabcd,
to become efgh,
How can I create regex like that? It seems optional character cannot be back-referenced, i.e something like: s/.*(,)?$/efgh1
won't work (I tried :) )
To make it clear, the lines are arbitrary length with arbitrary characters. The only condition in my case is to preserve comma at the end of the line after the replacement if one existed there or drop it if line did not end up with comma
regular-expression
regular-expression
New contributor
New contributor
edited 2 days ago
Shimon Pozin
New contributor
asked 2 days ago
Shimon PozinShimon Pozin
1012
1012
New contributor
New contributor
1
Any length lines? Alwaysabcd
? Always a comma? How do we tell whether or not the last character should be kept?
– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.
– Torin
2 days ago
add a comment |
1
Any length lines? Alwaysabcd
? Always a comma? How do we tell whether or not the last character should be kept?
– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.
– Torin
2 days ago
1
1
Any length lines? Always
abcd
? Always a comma? How do we tell whether or not the last character should be kept?– roaima
2 days ago
Any length lines? Always
abcd
? Always a comma? How do we tell whether or not the last character should be kept?– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.– Torin
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.– Torin
2 days ago
add a comment |
2 Answers
2
active
oldest
votes
Another one:
$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,
This matches the end of the line $
or the comma ,
in the captured group.
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
add a comment |
I believe you are referring to something like:
's/[a-z]+([^a-z]0,1)$/efgh1/g'
Complete sed commands + output:
$ echo "abcd," | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh
New contributor
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change[^a-z]
to just,
in the given regular expression (and delete theg
at the end as the substitution would by necessity only match once ever).
– Kusalananda♦
yesterday
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
);
);
Shimon Pozin is a new contributor. Be nice, and check out our Code of Conduct.
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%2f511322%2fneed-regex-to-replace-the-whole-line-but-the-last-optional-character%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Another one:
$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,
This matches the end of the line $
or the comma ,
in the captured group.
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
add a comment |
Another one:
$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,
This matches the end of the line $
or the comma ,
in the captured group.
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
add a comment |
Another one:
$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,
This matches the end of the line $
or the comma ,
in the captured group.
Another one:
$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,
This matches the end of the line $
or the comma ,
in the captured group.
edited 2 days ago
answered 2 days ago
FreddyFreddy
1,612210
1,612210
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
add a comment |
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
Thank you so much! That's exactly what I was looking for. I totally forgot that capturing group may have more than 1 character! I hope this solution will save time for somebody else in the future as well.
– Shimon Pozin
2 days ago
add a comment |
I believe you are referring to something like:
's/[a-z]+([^a-z]0,1)$/efgh1/g'
Complete sed commands + output:
$ echo "abcd," | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh
New contributor
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change[^a-z]
to just,
in the given regular expression (and delete theg
at the end as the substitution would by necessity only match once ever).
– Kusalananda♦
yesterday
add a comment |
I believe you are referring to something like:
's/[a-z]+([^a-z]0,1)$/efgh1/g'
Complete sed commands + output:
$ echo "abcd," | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh
New contributor
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change[^a-z]
to just,
in the given regular expression (and delete theg
at the end as the substitution would by necessity only match once ever).
– Kusalananda♦
yesterday
add a comment |
I believe you are referring to something like:
's/[a-z]+([^a-z]0,1)$/efgh1/g'
Complete sed commands + output:
$ echo "abcd," | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh
New contributor
I believe you are referring to something like:
's/[a-z]+([^a-z]0,1)$/efgh1/g'
Complete sed commands + output:
$ echo "abcd," | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]+([^a-z]0,1)$/efgh1/g'
efgh
New contributor
New contributor
answered 2 days ago
PMartPMart
1
1
New contributor
New contributor
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change[^a-z]
to just,
in the given regular expression (and delete theg
at the end as the substitution would by necessity only match once ever).
– Kusalananda♦
yesterday
add a comment |
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change[^a-z]
to just,
in the given regular expression (and delete theg
at the end as the substitution would by necessity only match once ever).
– Kusalananda♦
yesterday
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
I think this works for specific example I gave, but I am not sure about arbitrary line (i search for specific pattern in the line, but then replace it entirely, preserving only comma at the end of the line) So, if I read it correct, we capture end of line that is not a letter and appears 0 or 1 times, right? But if it's a period, it will preserve it too? I only need to preserve it if it's comma. If it's ending of json statement, for example ("xxx}") I don't want to preserve the last character. But if it's "xxx}," then I do want to transfer comma into replacement. Sorry if I was not clear.
– Shimon Pozin
2 days ago
@ShimonPozin You are correct in your comment here. You could change
[^a-z]
to just ,
in the given regular expression (and delete the g
at the end as the substitution would by necessity only match once ever).– Kusalananda♦
yesterday
@ShimonPozin You are correct in your comment here. You could change
[^a-z]
to just ,
in the given regular expression (and delete the g
at the end as the substitution would by necessity only match once ever).– Kusalananda♦
yesterday
add a comment |
Shimon Pozin is a new contributor. Be nice, and check out our Code of Conduct.
Shimon Pozin is a new contributor. Be nice, and check out our Code of Conduct.
Shimon Pozin is a new contributor. Be nice, and check out our Code of Conduct.
Shimon Pozin 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.
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%2f511322%2fneed-regex-to-replace-the-whole-line-but-the-last-optional-character%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
-regular-expression
1
Any length lines? Always
abcd
? Always a comma? How do we tell whether or not the last character should be kept?– roaima
2 days ago
What tool are you using to apply the RE? Different tools use different variants (unfortunately).
– roaima
2 days ago
.*
is greedy, meaning it will match the whole string first then try the rest of the match, which since the next group is optional it will never get matched. Some regex flavors have a reluctant quantifier which will try matching the least amount of characters.– Torin
2 days ago