2012-09-17 64 views
1

我必須在shell腳本中編寫一個正則表達式來獲取另一個字符串中的字符串,以便我的變量字符串myString出現在正則表達式字符串中。我怎樣才能做到這一點?在bash中的正則表達式中的字符串變量?

+0

如果你告訴更多你想要做什麼,這將有助於。 「take myString」是什麼意思?做myString改變,什麼是你希望匹配的表達式的上下文中的常量? – CharlesB

+0

@CharlesB我編輯了我的問題。你可以看一下嗎? – Larry

+0

*「myString是一個常量字符串」* ...除非我在這裏丟失了某些東西,如果您匹配一個常量字符串,則不需要正則表達式。你是否試圖提取雙引號內的所有內容?雙引號之外的文本是否保持不變? –

回答

-1

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

+0

yeap,我知道我可以像這樣使用grep:grep -P'。*「。*」。 *'-o [文件]但是,我想要在雙引號內取得字符串。 @Bitwise – Larry

2

如果你想在雙引號中提取文本,並假設只有有一對雙引號,這樣做的一個方法是:

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

當然,如果只有一組引號你也可以不用SED /正則表達式:

[[email protected]]$ echo $A | cut -d'"' -f2 
myString 
+0

不錯:)。我知道了。 – Larry

0
>echo 'hi "there" ' | perl -pe 's/.*(["].*["])/\1/g' 
"there" 
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 
0

您還可以使用 'AWK':

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

# awk '/"substring"/ {print}' means to print string, which contains regexp "this" 
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 
相關問題