如何用单个grep命令筛选未被反引号包裹的手册页条目
解决方案
你的问题出在原正则表达式要求手册页前后必须有非反引号的字符,但像* abc(1)这类行里的手册页后面是行尾,没有字符,所以匹配失败;同时原表达式也没考虑手册页处于行首或行尾的情况。
用带Perl兼容正则的grep命令可以解决:
grep -P '(?<!`)[a-z]+\([0-9]\)(?!`)' 你的文件名
正则解释:
-P:启用Perl兼容正则表达式,支持零宽断言(?<!)`:负向后断言,确保目标手册页前面没有反引号[a-z]+\([0-9]\):匹配标准手册页格式(小写字母+括号包裹的数字)(?!)`:负向前断言,确保目标手册页后面没有反引号
这个命令会匹配所有包含未被反引号包裹的手册页的行,符合你的预期输出:
Read the `lmn(7)` man page but not qrs(6). * abc(1) * xyz(5)
内容的提问来源于stack exchange,提问作者Harald Ziegler
相关产品推荐
相关产品推荐

