Regex 在bash中匹配正确的正则表达式
br.com.example.pc1-匹配:( br.com.example.pc1.test-匹配:) 我想通过数学来完成它:br.com.example.pc1.testRegex 在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") 或者简单地将包定义更改为
我试着用“$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//./\\.}\.")