当前我有一组格式为
的字符串customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)
从这里我可以使用sed提取customName,即第一个括号前的字符。
到目前为止,我最好的猜测是:
echo $s | sed 's/([^(])+\(.*\)/\1/g'
echo $s | sed 's/([^\(])+\(.*\)/\1/g'
然而,使用这些我得到错误:
sed: -e expression #1, char 21: Unmatched ( or \(
那我该如何形成正确的正则表达式呢?为什么我没有匹配的\是相关的\(它只是我的表达式的转义字符,而不是用于格式化的字符?
答案 0 :(得分:2)
您可以替换左括号后的所有内容,如下所示(请注意,默认情况下括号不需要在sed
中转义)
echo 'customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)' |
sed -e 's/(.*//'
答案 1 :(得分:2)
<强>的grep 强>
kent$ echo "customName(blah)"|grep -o '^[^(]*'
customName
<强> SED 强>
kent$ echo "customName(blah)"|sed 's/(.*//'
customName
注意我更改了括号之间的内容。
答案 2 :(得分:1)
不同的选择:
$ echo $s | sed 's/(.*//' #sed (everything before "(")
customName
$ echo $s | cut -d"(" -f1 #cut (delimiter is "(", print 1st block)
customName
$ echo $s | awk -F"(" '{print $1}' #awk (field separator is "(", print 1st)
customName
$ echo ${s%(*} #bash command substitution
customName