删除行中的空格和数字,直到一行中的第一个字符

时间:2018-07-05 23:09:50

标签: linux bash sed grep

我在test_file中有一个文件Linux,如下所示。

ags;'s


dkfprper


sdkl;d;;'s

ip access

 100 200 remark
 50 deny pdldsl;l;sd;;l;d
 permit eyuopopqwopq
 10 permit eteioe
 200 200 200 deny abc

remark aiii[dsigdfidflkfk

1 deny

现在我要提取其中包含ip or remark or deny or permit的行

我已经完成了下面的工作。

grep -E 'ip|remark|deny|permit' test_file >> string_check

结果在下面

ip access
 100 200 remark
 50 deny pdldsl;l;sd;;l;d
 permit eyuopopqwopq
 10 permit eteioe
 200 200 200 deny abc
remark aiii[dsigdfidflkfk
1 deny

现在,我要从行中删除所有numbers and spaces,直到获得ip or remark or deny or permit作为起始词。

我想要的结果是

ip access
remark
deny pdldsl;l;sd;;l;d
permit eyuopopqwopq
permit eteioe
deny abc
remark aiii[dsigdfidflkfk
deny

我已经完成了以下操作,但没有得到任何结果

sed 's/^ *//g' string_check

这只会删除行首的空格

我如何获得结果?

1 个答案:

答案 0 :(得分:4)

sed -E -n 's/^[ 0-9]*(ip|remark|deny|permit)/\1/p' test_file

打破这一点:

  • sed -E表示使用“扩展”正则表达式语法;没有它,您将需要更多反斜杠
  • sed -n说不要打印行,除非使用了p命令
  • 正则表达式在行首匹配空格或数字,后跟一个关键字
  • 替换仅用关键字替换行首的该字符串
  • s///p说如果替换完成,则打印出该行