使用grep递归查找含百分号的字符串:如何转义printf '%0模式?
解决grep搜索
printf '%0的转义问题 要递归查找~/bin/下所有包含printf '%0的文件,之前的命令失败是因为%在grep默认的基本正则表达式(BRE)中是行尾锚点,属于特殊字符,需要正确转义;同时shell对引号的处理也会影响模式传递。以下是两种可行的解决方法:
方法1:转义正则特殊字符(BRE模式)
在双引号中给%添加反斜杠转义,让grep将其视为字面量字符:
grep -rnw ~/bin/ -e "printf '%\0"
或者用单引号包裹模式(需转义内部的单引号),同时转义%:
grep -rnw ~/bin/ -e 'printf '\''\%0'
方法2:使用固定字符串匹配(推荐)
使用grep的-F选项(等价于fgrep),将模式当作纯字符串而非正则表达式处理,无需转义特殊字符:
grep -rnwF ~/bin/ -e 'printf '\''%0'
或者用双引号包裹模式(无需转义单引号):
grep -rnwF ~/bin/ -e "printf '%0"
验证示例
针对示例文件内容:
#!/bin/sh printf '%04d' "$var"
上述命令都能成功匹配到printf '%04d'这一行,因为printf '%0是该行的前缀内容。
内容的提问来源于stack exchange,提问作者midnite
相关产品推荐
相关产品推荐

