Regex 在bash中匹配正确的正则表达式

Regex 在bash中匹配正确的正则表达式,regex,bash,Regex,Bash,br.com.example.pc1-匹配:( br.com.example.pc1.test-匹配:) 我想通过数学来完成它:br.com.example.pc1.test 我试着用“$package$”进入最后一行,但没有成功营救awk。我想你想让正则表达式反过来工作,试试这个而不是grep $package=br.com.example.pc1.test search=$(adb shell pm list packages | grep "$package") 或者简单地将包定义更改为

br.com.example.pc1-匹配:(

br.com.example.pc1.test-匹配:)

我想通过数学来完成它:br.com.example.pc1.test


我试着用“$package$”进入最后一行,但没有成功营救awk。我想你想让正则表达式反过来工作,试试这个而不是grep

$package=br.com.example.pc1.test
search=$(adb shell pm list packages | grep "$package")

或者简单地将包定义更改为子字符串
br.com.example.pc1

,假设您希望使用
grep
逐字匹配变量值:使用
-F
选项,该选项执行逐字逐字的子字符串搜索(而不是将搜索字符串解释为正则表达式,默认情况下,
grep
会这样做):

请注意,这将在每行上执行子字符串搜索


如果您的目的是精确匹配
'br.com.example.pc1.test'
(即,仅当整个输入行匹配时),请添加
-x

package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package")

如果要匹配以
br.com.example.pc1.test开头但包含其他组件的子字符串,只需将
附加到搜索字符串:

package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -Fx "$package")

但是,这仍然会与
br.com.example.pc1.test
之前的字符匹配

要确保搜索字符串仅在行首匹配,您需要一个带有锚点
^
的正则表达式:

package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package.")

注意Bash参数扩展如何
${package/./\\.}
用于转义变量值中的
字符。
以确保
grep
在正则表达式的上下文中将它们视为文本
字符。

能否进一步解释问题所在?您正在匹配不希望匹配的结果?还要注意shell变量赋值人ts的前缀不能是
$
;只能使用
$
引用变量。
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package.")
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep "^${package//./\\.}\.")