这个bash脚本应该从grep结果中删除前导空格:
#!/bin/bash
grep --color=always $@ | sed -r -e's/:[[:space:]]*/:/'
但它与空白不符。如果我将替换文本更改为“ - ”,它会显示在输出中,但它仍然不会删除空格。我试过没有“*”,逃避“*”,“+”等,但没有任何作用。有谁知道为什么不呢?
(我在Ubuntu 12.04上使用sed版本4.2.1。)
谢谢大家,这是我修改后的脚本,它显示了grep颜色并修剪了前导空白:
#!/bin/bash
grep --color=always $@ | sed -r -e's/[[:space:]]+//'
答案 0 :(得分:6)
您需要删除--color选项才能生效。颜色代码混淆了sed:
grep $@ | sed -r -e's/:[[:space:]]*/:/'
答案 1 :(得分:2)
grep
输出的颜色信息采用特殊字符序列的形式(参见this StackOverflow question的答案),所以如果冒号是彩色的而且空白不是,反之亦然,那么表示其中一个字符序列位于它们之间,因此sed
不会将它们视为相邻字符。
答案 2 :(得分:0)
字符类\ s将匹配空白字符和
例如:
$ sed -e "s/\s\{3,\}/ /g" inputFile
将用两个空格替换至少3个空格的每个序列。
答案 3 :(得分:0)
grep --color=always $@ |sed 's/^ //g'
删除前导空格。