UNIX中sed命令匹配到I时输出整行,如何仅输出匹配的字符I?
问题原因
你当前使用的/\bI\b/p语法的作用是匹配到包含独立字符I的行时打印整行,自然不会只输出匹配到的I本身。另外你命令里前缀的find |是无效冗余内容,你已经指定了输入文件为file.txt,不需要管道连接find命令。
调整方案
单行最多1个I的场景
如果你的文件里每行最多只有一个独立I,用以下命令即可:
sed -nE 's/^.*\b(I)\b.*$/\1/p' file.txt
原理是用替换把整行内容替换为匹配到的独立I,再打印替换后的结果。
单行可能有多个I的场景
如果一行内可能出现多个独立I,需要全部提取输出,用以下命令:
sed -nE 's/[^[:alpha:]]*(I)[^[:alpha:]]*/\1\n/g; s/\n+$//; p' file.txt | grep '^I$'
原理是先把所有非I的内容替换为空,仅保留匹配到的I和换行符,最后过滤得到所有的独立I。
内容的提问来源于stack exchange,提问作者Schmitty
相关产品推荐
相关产品推荐

