如何用awk或grep筛选包含文件路径的行?
提取包含文件路径的行的解决方法
问题原因
你之前的awk '/^[[:digit:]]+\/data\/.*/gm'命令逻辑错误:一方面你的目标行路径是/some/directory/而非/data/,正则无法精准匹配;另一方面该正则没有限制->后的内容,导致空行也被错误匹配,所以返回了所有行。
可行方案
方案1:使用grep
匹配->后有非空白内容的行(通用场景)
grep -E '->\s*\S+' file_to_test.txt
-E:启用扩展正则表达式,简化语法->\s*\S+:匹配->后接任意数量空白字符(可选)+至少一个非空白字符的行,直接过滤掉->后为空的行
精准匹配以/开头的路径(更严格)
如果确定路径都是以/开头的,可以用更精准的正则:
grep -E '->\s*/' file_to_test.txt
方案2:使用awk
正则匹配法
awk '/->\s*\S+/' file_to_test.txt
逻辑和grep的通用方案一致,匹配->后有非空白内容的行。
字段分隔法
以->作为分隔符,检查分隔后的第二个字段是否有非空白内容:
awk -F'->' '$2 ~ /\S/' file_to_test.txt
-F'->':指定->为字段分隔符$2 ~ /\S/:判断第二个字段(即->后面的内容)是否包含非空白字符,满足条件则输出该行
测试结果
针对你的测试文件:
1234567890 ->
2345678901 -> /some/directory/some_file.txt
执行上述任意命令,都会仅返回第二行:
2345678901 -> /some/directory/some_file.txt
内容的提问来源于stack exchange,提问作者Skittles
相关产品推荐
相关产品推荐

