bash中正则表达式中的字符串变量?

时间:2012-09-17 09:00:53

标签: regex shell unix

我必须在shell脚本中编写一个正则表达式来获取另一个字符串中的字符串,以便我的变量字符串myString出现在正则表达式字符串中。我怎么能这样做?

6 个答案:

答案 0 :(得分:2)

如果你想在双引号中提取文本,并假设只有一组双引号,那么一种方法是:

[me@home]$ echo $A
to get "myString" in regular expression
[me@home]$ echo $A | sed -n 's/.*"\(.*\)".*/\1/p'
myString

当然,如果只有一组引号,你也可以不用sed / regex:

[me@home]$ echo $A | cut -d'"' -f2
myString

答案 1 :(得分:1)

如果你知道只有一套双引号,你可以像这样使用shell parameter expansion

zsh> s='to get "myString" in regular expression'
zsh> echo ${${s#*\"}%\"*}
mystring

bash不支持多级扩展,因此需要按顺序应用扩展:

bash> s='to get "myString" in regular expression'
bash> s=${s#*\"}
bash> s=${s%\"*}
bash> echo $s
mystring

答案 2 :(得分:0)

>echo 'hi "there" ' | perl -pe 's/.*(["].*["])/\1/g'
"there" 

答案 3 :(得分:0)

你也可以使用'awk':

echo 'this is string with "substring" here' | awk '/"substring"/ {print}'

# awk '/"substring"/ {print}' means to print string, which contains regexp "this" 

答案 4 :(得分:0)

在Bash中,您可以使用[[ ... ]] conditional construct中的 =〜运算符以及BASH_REMATCH variable

使用示例:

TEXT='hello "world", how are you?'
if [[ $TEXT =~ \"(.*)\" ]]; then
    echo "found ${BASH_REMATCH[1]} between double quotes."
else
    echo "nothing found between double quotes."
fi

答案 5 :(得分:-1)

grep是在shell中查找正则表达式的最常用工具。