替换行开头后的匹配项和另一个模式

替换行开头后的匹配项和另一个模式

我试图删除位于多个字符串行开头的字符,但是,在该行开头之前还有另一个模式,我不想删除它:

1:string:test...
2:string test
3:etc...

1 string:test...
2 string test
3 etc...

:有些字符串还可以包含使事情变得有趣的字符。到目前为止我尝试过:

echo "1:test:" | grep -Pv '(?<=\d):'

它确实匹配该:字符(至少它突出显示它,所以我猜测它是匹配的),但在使用标志时它不会被省略-v,也许是因为它与匹配项位于同一行? (这里我只实验了如何匹配它并删除它,而不是用空格替换它,如前面提到的示例所示)

echo "1:test:" | sed 's/^.:./ /g'

这似乎是我得到的最接近的,但它切断了角色旁边的其余部分:,这给出了:

est:

代替

1 test:

答案1

这有效:

echo -e "1:test:\n2:test\n3:test:\n" | sed '/:/s// /'

打印

1 test:
2 test
3 test:

答案2

Python

#!/usr/bin/python
import re
k=re.compile(":")
m=open('filename','r')
for i in m:
    print i.replace(":"," ",1).strip()

awk 命令仅适用于提到的示例

awk  -F ":" '{print substr($0,1,1),substr($0,3)}' filename

sed命令

  sed "s/:/ /1" filename

相关内容