我必须在shell脚本中编写一个正则表达式来获取另一个字符串中的字符串,以便我的变量字符串myString
出现在正则表达式字符串中。我怎么能这样做?
答案 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中查找正则表达式的最常用工具。