I am trying to obtain the first word before /
I am using following sed:
echo 'a/b/c' | sed 's/\(.*\)\/\(.*\)/\1/g'
But this gives me a/b, I would like it to give me only a
Any ideas?
CodePudding user response:
You can use
echo 'a/b/c' | sed 's,\([^/]*\)/.*,\1,'
Details:
\([^/]*\)- Group 1 (\1): any zero or more chars other than//- a/char.*- the rest of the string.
Or, if you have a variable, you can use string manipulation:
s='a/b/c'
echo "${s%%/*}"
# => a
Here, %% removes the longest substring from the end, that matches the /* glob pattern, up to the first / in the string including it.
CodePudding user response:
This can be done easily in bash itself without calling any external utility:
s='a/b/c'
echo "${s%%/*}"
a
# or else
echo "${s/\/*}"
a
CodePudding user response:
Using sed and an alternate delimiter to prevent a conflict with a similar char in the data.
$ echo 'a/b/c' | sed 's#/.*##'
a
CodePudding user response:
Use cut instead of sed to isolate char-separated fields for clarity, simplicity, and efficiency:
$ echo 'a/b/c' | cut -d'/' -f1
a
$ echo 'a/b/c/d/e/f/g/h/i' | cut -d'/' -f5
e
