2

这个 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:]]+//'
4

4 回答 4

6

您需要删除 --color 选项才能使其正常工作。颜色代码混淆了 sed:

grep  $@ | sed -r -e's/:[[:space:]]*/:/'
于 2012-09-07T19:50:31.117 回答
2

输出的颜色信息grep采用特殊字符序列的形式(请参阅此 StackOverflow 问题的答案),因此如果冒号是彩色的而空格不是彩色的,反之亦然,那么这意味着这些字符序列之一将介于它们,因此sed不会将它们视为相邻字符。

于 2012-09-07T19:55:47.897 回答
0

字符类 \s 将匹配空白字符和

例如:

$ sed -e "s/\s\{3,\}/  /g" inputFile

将用两个空格替换至少 3 个空格的每个序列。

于 2012-09-07T19:48:47.297 回答
0
grep --color=always $@ |sed 's/^ //g'

删除前导空格。

于 2012-09-07T19:52:01.487 回答