Issue
I have a string like
July 20th 2017, 11:03:37.620 fc384c3d-9a75-459d-ba92-99069db0e7bf
I need to remove everything from the beginning of the line till the UUID substring (it's a tab, \t just before the UUID).
My regex looks like that:
^\s*July(.*)\t
When I test it in regex101 it all works beatufully: https://regex101.com/r/eZ1gT7/1077
However, when I plonk that into a sed command it doesn't do any substitution:
less pensionQuery.txt | sed -e 's/^\s*July(.*)\t//'
where pensionQuery.txt is a file full of the lines similar to the above. So the command above simply spits out unmodified file contnent.
Is my sed command wrong?
Any ideas?
Solution
The regex is right, you are not trying sed
with --regexp-extended
'-E'
'--regexp-extended'
Use extended regular expressions rather than basic regular expressions. Extended regexps are those that
egrep
accepts; they can be clearer because they usually have fewer backslashes. Historically this was aGNU
extension, but the-E
extension has since been added to thePOSIX
standard
echo -e $'July 20th 2017, 11:03:37.620\tfc384c3d-9a75-459d-ba92-99069db0e7bf' |
sed -E 's/^\s*July(.*)\t//'
fc384c3d-9a75-459d-ba92-99069db0e7bf
Also a simple read-up on Basic (BRE) and extended (ERE) regular expression
Basic and extended regular expressions are two variations on the syntax of the specified pattern. Basic Regular Expression (BRE) is the default in
sed
(and similarly ingrep
). Extended Regular Expression syntax (ERE) is activated by using the-r
or-E
options (and similarly,grep -E
).
Answered By - Inian