如何在shell脚本中转义grep的方括号

如何在shell脚本中转义grep的方括号,grep,ksh,Grep,Ksh,我的脚本中有下面这行代码,但它不能正常工作: log_error_not_loaded=$( grep -e " ([^0]|[0-9]{2,}) Rows not loaded" ./my_file_name ) 日志\u错误\u未加载=$( grep-e“([^0]|[0-9]{2,})行未加载”。/my_file_name ) 但是,当我在脚本之外单独执行该行时,它会工作(输出行): grep-e“([^0]|[0-9]{2,})行未加载”。/my_file_name 从我运行的其

我的脚本中有下面这行代码,但它不能正常工作:

log_error_not_loaded=$( grep -e " ([^0]|[0-9]{2,}) Rows not loaded" ./my_file_name ) 日志\u错误\u未加载=$( grep-e“([^0]|[0-9]{2,})行未加载”。/my_file_name ) 但是,当我在脚本之外单独执行该行时,它会工作(输出行):

grep-e“([^0]|[0-9]{2,})行未加载”。/my_file_name
从我运行的其他测试来看,我认为是
[]
{}
导致了问题。典型\escape不起作用。

我只需要对管道、括号和大括号进行转义:

log_error_not_loaded=$(
    grep -e " \([^0]\|[0-9]\{2,\}\) Rows not loaded" ./my_file_name
)

为什么不使用单引号而不是dbl引号?单引号将消除一类问题(不能确定它是否会解决问题)。祝你好运。你能将你的grep改为
log\u error\u not\u loaded=$(grep“Rows not loaded”。/my\u file\u name)
@sheller-单引号不能help@wallter-a、 sqlldr日志在成功时仍然返回“0行未加载”,因此,它将在成功运行时检测错误。您可以将第一个grep(
0行未加载
)的结果通过管道传输到
grep-v
,您只需找出grep之前的字符(空格或行首
^
)。或者颠倒您的逻辑,只有当您发现一行
0行未加载时,脚本才会工作。不,您需要给grep
-E
参数,告诉它使用ERE而不是BRE。
log_error_not_loaded=$(
    grep -e " \([^0]\|[0-9]\{2,\}\) Rows not loaded" ./my_file_name
)