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;








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 but
abcd, 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










share|improve this question









New contributor




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















  • 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

















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 but
abcd, 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










share|improve this question









New contributor




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















  • 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













0












0








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 but
abcd, 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










share|improve this question









New contributor




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












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 but
abcd, 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






share|improve this question









New contributor




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











share|improve this question









New contributor




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









share|improve this question




share|improve this question








edited 2 days ago







Shimon Pozin













New contributor




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









asked 2 days ago









Shimon PozinShimon Pozin

1012




1012




New contributor




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





New contributor





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






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







  • 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












  • 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







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










2 Answers
2






active

oldest

votes


















1














Another one:



$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,


This matches the end of the line $ or the comma , in the captured group.






share|improve this answer

























  • 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


















0














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





share|improve this answer








New contributor




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




















  • 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












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.









draft saved

draft discarded


















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









1














Another one:



$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,


This matches the end of the line $ or the comma , in the captured group.






share|improve this answer

























  • 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















1














Another one:



$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,


This matches the end of the line $ or the comma , in the captured group.






share|improve this answer

























  • 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













1












1








1







Another one:



$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,


This matches the end of the line $ or the comma , in the captured group.






share|improve this answer















Another one:



$ echo -e "abcdnabcd," | sed 's/.*($|,)/efgh1/'
efgh
efgh,


This matches the end of the line $ or the comma , in the captured group.







share|improve this answer














share|improve this answer



share|improve this answer








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

















  • 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













0














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





share|improve this answer








New contributor




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




















  • 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
















0














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





share|improve this answer








New contributor




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




















  • 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














0












0








0







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





share|improve this answer








New contributor




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










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






share|improve this answer








New contributor




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









share|improve this answer



share|improve this answer






New contributor




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









answered 2 days ago









PMartPMart

1




1




New contributor




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





New contributor





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






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












  • 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


















  • 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

















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











Shimon Pozin is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















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.




draft saved


draft discarded














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





















































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

Popular posts from this blog

Frič See also Navigation menuinternal link

Identify plant with long narrow paired leaves and reddish stems Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?What is this plant with long sharp leaves? Is it a weed?What is this 3ft high, stalky plant, with mid sized narrow leaves?What is this young shrub with opposite ovate, crenate leaves and reddish stems?What is this plant with large broad serrated leaves?Identify this upright branching weed with long leaves and reddish stemsPlease help me identify this bulbous plant with long, broad leaves and white flowersWhat is this small annual with narrow gray/green leaves and rust colored daisy-type flowers?What is this chilli plant?Does anyone know what type of chilli plant this is?Help identify this plant

fontconfig warning: “/etc/fonts/fonts.conf”, line 100: unknown “element blank” The 2019 Stack Overflow Developer Survey Results Are In“tar: unrecognized option --warning” during 'apt-get install'How to fix Fontconfig errorHow do I figure out which font file is chosen for a system generic font alias?Why are some apt-get-installed fonts being ignored by fc-list, xfontsel, etc?Reload settings in /etc/fonts/conf.dTaking 30 seconds longer to boot after upgrade from jessie to stretchHow to match multiple font names with a single <match> element?Adding a custom font to fontconfigRemoving fonts from fontconfig <match> resultsBroken fonts after upgrading Firefox ESR to latest Firefox