Remove the first part of a string using sed
You're parsing some text to extract the username from a domain\username
string, most likely from Windows. Most of the above answers are only addressing your specific example string.
The best way to do this is using regex in sed to extract whatever comes after \
. Here's how you would do it:
sed 's|.*\\\(.*\)|\1|'
That will match everything (.*
) until a backslash (here, we're escaping it, so it's \\
), then match everything after the backslash (.*
), but making it a capture group (i.e. wrap brackets around it, but we also have to escape them, so \(.*\)
). Now that we have whatever comes after the \
in the string as a capture group, we print it by referencing it with \1
.
You can use the above sed
command with any domain name, not necessarily randomcollege-nt
.
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
I'd use a simple grep
to look for user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
If user90 is not constant, prefer this command:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Finally using sed
to edit the file in place:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
Or to match all possible user accounts:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
Another sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
or POSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90