如何在bash中使用POSIX规范find命令筛选含单引号'的目录?
正确实现方案
报错原因
你遇到的语法错误是Bash单引号字符串的转义规则导致的:单引号包裹的字符串内部不支持直接写单引号字符,你写的'^.*[']*$'中,中间的'会提前结束前面的单引号字符串,后续内容无法被Bash正常解析。
方案1:优先推荐(更简洁,符合POSIX)
不用正则,直接用-name参数匹配含单引号的目录:
find . -maxdepth 1 -mindepth 1 -type d -name "*'*" -print
*'*是通配符规则,匹配任意包含单引号的文件名,双引号包裹的字符串内可以直接使用单引号,不存在转义冲突。
方案2:正则匹配版本(如果你需要用正则实现)
如果必须用-regex参数,可以用以下两种正确转义的写法:
- 单引号字符串中转义单引号:
find . -maxdepth 1 -mindepth 1 -type d -regex '^.*'"'"'.*$' -print
这里的'"'"'是Bash单引号字符串中插入单引号的标准写法:先结束前半段单引号',然后写一个用双引号包裹的单引号"'",再接后半段单引号字符串的剩余部分'。
2. 外层用双引号包裹正则表达式:
find . -maxdepth 1 -mindepth 1 -type d -regex "^.*'.*$" -print
双引号内可以直接使用单引号,写法更易读。
两种正则写法都完全符合POSIX规范,效果一致。
内容的提问来源于stack exchange,提问作者LuCC
相关产品推荐
相关产品推荐

