如何使用grep提取含脱字符^的字符串中指定区间子串
用grep提取含脱字符
^的目标子串的正确方法 原始字符串:
^25555555~BIG^20200629^20022222^20200629^55555555^^^DI^00~CUR^ZZ^USD
需要提取BIG^和^00之间的子串,即:20200629^20022222^20200629^55555555^^^DI
之前的命令失败是因为^在正则表达式中是特殊字符(表示行起始位置),直接写会被当作正则语法解析,而非字面的脱字符。解决核心是对^进行转义,在Perl兼容正则(-P参数)中用\^表示字面的^。
正确命令
echo "^25555555~BIG^20200629^20022222^20200629^55555555^^^DI^00~CUR^ZZ^USD" | grep -o -P '(?<=BIG\^).*(?=\^00)'
命令解释
(?<=BIG\^):正向零宽断言,限定匹配内容的前面必须是BIG^,\^转义后代表字面的脱字符.*:匹配中间所有字符(如果字符串存在多个^00,建议用.*?非贪婪匹配,避免匹配到最后一个^00之前的全部内容)(?=\^00):正向零宽断言,限定匹配内容的后面必须是^00,同样用\^转义脱字符
执行后会直接返回目标子串:20200629^20022222^20200629^55555555^^^DI
内容的提问来源于stack exchange,提问作者PravinB
相关产品推荐
相关产品推荐

