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