我想删除下面字符串中的"AS“部分,
CONV.BUY AS BUY, CONV.CUSTOM1 AS CUSTOM1 , TP.BUY AS BUY, TP.CUSTOM1 AS CUSTOM1 应改为
CONV.BUY, CONV.CUSTOM1, TP.BUY, TP.CUSTOM1我所做的是
echo $string | sed -e 's/ AS.*\,/\,/g'这给
CONV.BUY, TP.CUSTOM1 AS CUSTOM1两个字段在sed中被过滤掉。有没有更好的解决方案来实现我的目标而不使用循环?
发布于 2016-09-20 19:13:07
用sed
sed 's/[[:blank:]]AS[^,]*//g'[[:blank:]]AS匹配一个空格之前的AS,然后[^,]*匹配到下一个,。所有这些匹配的部分都通过用null替换来删除。示例:
% sed 's/[[:blank:]]AS[^,]*//g' <<<'CONV.BUY AS BUY, CONV.CUSTOM1 AS CUSTOM1 , TP.BUY AS BUY, TP.CUSTOM1 AS CUSTOM1'
CONV.BUY, CONV.CUSTOM1, TP.BUY, TP.CUSTOM1发布于 2016-09-20 19:13:52
可以将否定式字符类用作
sed 's/AS[^,]*//g'[^,]*匹配零或多个非,字符。这意味着它与直接的,匹配,并将其替换为null。示例
>>> echo "EONV.BUY AS BUY, CONV.CUSTOM1 AS CUSTOM1 , TP.BUY AS BUY, TP.CUSTOM1 AS CUSTOM1" | gsed 's/AS[^,]*//g'
EONV.BUY , CONV.CUSTOM1 , TP.BUY , TP.CUSTOM1https://stackoverflow.com/questions/39602032
复制相似问题