如何在非空格文本开始之前删除前面的空格+ regex + sed +

时间:2018-02-22 23:05:46

标签: regex bash sed

如何删除using (StreamReader sr = new StreamReader(fileName, Encoding.Default)) { string full = sr.ReadToEnd(); }

输出中809之前的前一个空格

这是我的样本:

echo

我可以使用sed删除3或4个空格:

$ echo '   809 23/Dec/2008:19:20'
   809 23/Dec/2008:19:20
^^^3 spaces here preceding the 809    

但我想要的是我的sed命令可以处理大于3的任何事情

        ...4 spaces here   
$ echo '    809 23/Dec/2008:19:20' | sed 's/^.\{3\,4\}//'
809 23/Dec/2008:19:20
0 spaces here preceding the 809    

何我在sed中编写正则表达式以删除809之前的3个或更多空格?

4 个答案:

答案 0 :(得分:6)

如果您想在开始时删除3个或更多空格

sed 's/^[[:blank:]]\{3,\}//'

<强>详情

  • ^ - 输入开始
  • [[:blank:]]\{3,\} - 连续发生3次或更多次水平空格。

如果您需要在特定值之前删除3个以上的空格,比如809,只需将该值添加到正则表达式和替换模式中:

sed 's/^[[:blank:]]\{3,\}809/809/'

或使用捕获组和占位符:

sed 's/^[[:blank:]]\{3,\}\(809\)/\1/'

enter image description here

答案 1 :(得分:3)

xargs让你无需考虑正则表达式。

$ echo '   809 23/Dec/2008:19:20' | xargs
809 23/Dec/2008:19:20

xargs这或多或少是非传统的伎俩。此工具旨在用于构建具有长参数列表的命令。从手册页:

  

xargs从标准输入读取项目,由空格分隔(可以用双引号或单引号保护或          反斜杠)或换行符,并执行命令

但是,在发送到后续命令之前,将修剪空白区域作为预处理的一部分。在这种情况下,没有后续命令,因此xargs只是按原样发送参数,以修剪的空格为模,输出到标准输出,这正是你所要求的。

答案 2 :(得分:1)

您可以使用{minimum,maximum}指定要使用的字符数。 如果您保留最大空白,则它将匹配至少包含最少字符数的任何内容。因此选择三个空格将是“\ {3,\}”。祝你好运!

答案 3 :(得分:0)

不要逃避逗号:

BOOT-INF