我从stackoverflow上读了一些关于这个问题的例子,但是没有一个对我有帮助。
我有一个文件夹,里面有一些sql文件。我想做的是遍历所有的SQL文件并搜索短语并检查它是否存在。最主要的问题是写一个grep表达式。
这个短语有一个模式:
&大学。。。
(例如:&uniq.hgk56kh/gfgtk
或&uniqjfru5u5gggggt
等)
在后,只有21个征兆,所以整个表达最多可有26个征兆。
你知道我该怎么做吗?
我的例子不起作用:
for f in `ls $WORKDIR/*.sql`
do
if [ $(grep '[&uniq.*]\{1,26}' $f) == 0 ]; then echo
if [ $(grep -w '[&uniq.*{1,26}]' $f) == 0 ]; then echo
if [ $(grep -E '[&uniq.[[:alnum:]]{1,26}}' $f) == 0 ]; then echo
if [ $(grep -E '&uniq.[[:alnum:]]{1,26}' $f) == 0 ]; then echo
if [ $(grep -E '&uniq.[A-Za-z0-9]{1,26}' $f) == 0 ]; then echo
if [ $(grep -E '[&uniq.[A-Za-z0-9]{1,26}]' $f) == 0 ]; then echo
if [ $(grep -w '[&uniq.[A-Za-z0-9]\{1,26\}]' $f) == 0 ]; then echo
if [ $(grep -w '[&uniq.*\{1,26\}]' $f) == 0 ]; then echo
if [ $(grep -w '[&uniq.*}\{1,10\}' $f) == 0 ]; then echo
if [ $(grep -E '[&uniq.[A-Za-z0-9]{1,26}' $f) == 0 ]; then echo
if [ $(grep -E '[&uniq.*{1,26}' $f) == 0 ]; then echo
if [ $(grep -E '&uniq.*'{1,26} $f) == 0 ]; then echo
if [ $(grep -E '&uniq.*.\{1,26\}' $f) == 0 ]; then echo
if [ $(grep -E '&uniq.[A-Za-z0-9]{1,26}' ~/$f) == 0 ]; then echo
if [ $(grep -e '[&uniq.*]\{1,26}' $f) == 0 ]; then echo
done
输入的一些示例:
对的:
&大学简介
&国际单项体育联合会
&大学
&康特鲁大学
不正确:
&另一个从长串到长串的例子
&FHTYGJYGJ767KJUHK87K8UKGFH56YHGYJ76JUJYJK大学
在这些示例之间有一些典型的sql文件行,如下所示:
SELECT a.YY,
a.RRX_ID,
a.MSRG_TYPE,
a.TGHSEB,
a.PROVIDERHJJ,
a.SALE_PROVIDERYTR,
a.REQUEST_PPL,
a.CONTENT_NAME, -- Name of content
a.CONTENT_TYPE, -- Name of content2
b.NET_AMOUNT,
a.SALE_MODEL_FROM_PAST,
a.SERVICE_MODE_ON,
a.RESPONSE_STATUS_CODE,
a.ERROR_DESC_FILE
FROM BBV.RAQ45_TJKIO a,
(SELECT * from &uniq.FGGT8IO) b
最佳答案
我建议使用以下方法:
for f in /path/to/sql/files/*.sql; do
if grep -q '&uniq.\{1,21\}' "$f"; then
echo "match in file $f"
fi
done
这与目录
$f
中任何文件中的“&uniq”匹配,后跟1到21个字符。-q
切换到grep
表示没有输出,grep的返回代码指示是否存在匹配。假设您还想在模式的两边添加一些边界,这样就不会匹配
abc&uniqabc123abc123abc123 123456789
之类的内容。最好的方法取决于您的输入和使用的grep版本。根据您的示例输入判断,您可以使用模式
' &uniq.\{1,21\})'
将模式与前面的空格和后面的闭合)
匹配。根据注释中的额外信息,您应该将模式更改为类似于
'&uniq\.[[:alnum:]]\{1,21\}[^[:alnum:]]'
的内容,以便在&uniq
之后匹配一个文本点,介于1到21个字母数字字符之间,然后是任何非字母数字字符。关于bash - 如何使用grep查找给定的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30104185/