仅使用sed提取字符串中间段:抽取DECK后无前后空白的大写字母内容
sed提取指定内容方案
正确命令
sed -n 's/.*DECK[[:blank:]]*\([A-Z]*\)[[:blank:]]*$/\1/p' 目标文件名
命令说明
-n关闭sed默认的全量打印逻辑,仅打印经过替换匹配的行,过滤掉不含DECK的无关行- 正则逻辑:
- 匹配行首到
DECK及之后的所有空白字符:.*DECK[[:blank:]]* - 捕获
DECK后连续的大写字母序列:\([A-Z]*\)(sed默认基础正则模式下,捕获组括号需要加反斜杠转义) - 匹配捕获内容之后到行尾的所有空白字符:
[[:blank:]]*$,确保输出内容无前后空白
- 匹配行首到
- 末尾
p指令:将替换成功的行打印输出
输出结果
与预期完全一致:
AAA ABC ABA ABD
原有命令问题
你之前的命令主要存在三个问题:
- 未加
-n参数,所有行都会原样输出,无法过滤无关行 - 基础正则模式下捕获组括号未转义,捕获逻辑不生效
- 正则匹配规则错误,无法正确截取目标内容、也未处理目标内容后的剩余行内容
内容的提问来源于stack exchange,提问作者Ramanan T
相关产品推荐
相关产品推荐

