0

当前我有一组格式为的字符串

customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)

从中我想提取 customName,第一个括号之前的字符,使用 sed。

到目前为止,我最好的猜测是:

echo $s | sed 's/([^(])+\(.*\)/\1/g'
echo $s | sed 's/([^\(])+\(.*\)/\1/g'

但是,使用这些我得到错误:

sed: -e expression #1, char 21: Unmatched ( or \(

那么如何形成正确的正则表达式呢?为什么我没有匹配的 \( 是相关的,它只是我的表达式的转义字符,而不是用于格式化的字符?

4

3 回答 3

2

您可以像这样替换左括号后的所有内容(请注意,默认情况下括号不需要在 中转义sed

echo 'customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)' |
sed -e 's/(.*//'
于 2013-07-02T14:45:40.290 回答
2

grep

kent$  echo "customName(blah)"|grep -o '^[^(]*'
customName

sed

kent$  echo "customName(blah)"|sed 's/(.*//'   
customName

注意我改变了括号之间的东西。

于 2013-07-02T14:47:34.173 回答
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
于 2013-07-02T14:48:01.923 回答