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

Use*_*345 1 linux bash grep sed

test_fileLinux.

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
Run Code Online (Sandbox Code Playgroud)

现在我想提取包含线ip or remark or deny or permit在其中

我做了如下。

grep -E 'ip|remark|deny|permit' test_file >> string_check
Run Code Online (Sandbox Code Playgroud)

结果如下

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
Run Code Online (Sandbox Code Playgroud)

现在,我想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
Run Code Online (Sandbox Code Playgroud)

我已经做了如下,但我没有得到任何结果

sed 's/^ *//g' string_check
Run Code Online (Sandbox Code Playgroud)

这仅删除行首的空格

我怎样才能达到我的结果?

Dav*_*aze 5

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

打破这个:

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