如何获取子字符串,从bash中第一次出现模式开始

时间:2011-07-28 17:41:09

标签: bash shell

我正在尝试从模式的开头获取子字符串。

我只想使用cut,但如果模式的长度只有几个字符,则无效。

如果我需要一个单字符分隔符,那么这就可以解决问题:

result=`echo "test String with ( element in parenthesis ) end" | cut -d "(" -f 2-`

编辑:样本测试:

 INPUT: ("This test String is an input", "in")
 OUTPUT: "ing is an input"

 INPUT: ("This test string is an input", "in ")
 OUTPUT: ""

 INPUT: ("This test string is an input", "n")
 OUTPUT: "ng is an input"

注意:括号表示输入都采用字符串和分隔符字符串。

3 个答案:

答案 0 :(得分:1)

编辑:

总之,所要求的是一种从字符串中解析文本的方法,该字符串从特定子字符串开始并在行尾结束。如上所述,有很多方法可以做到这一点。这是一个...

egrep -o "DELIM.*" input

...其中'DELIM'是所需的子字符串。

答案 1 :(得分:0)

另外

awk -v delim="in" '{print substr($0, index($0, delim))}'

答案 2 :(得分:0)

这可以在没有外部程序的情况下完成。假设要处理的字符串位于$string且分隔符为DELIM

result=${string#"${string%%DELIM*}"}

内部部分用$string替换从第一次出现DELIM(如果有)开始的所有内容。然后,外部部分从$string的开头删除该值,从第一次出现的DELIM开始,或者如果DELIM没有出现则返回空字符串。 (变量string保持不变。)