줄 시작 후 일치 항목을 다른 패턴으로 바꿉니다.

줄 시작 후 일치 항목을 다른 패턴으로 바꿉니다.

여러 문자열 줄의 시작 부분에 있는 문자를 제거하려고 하는데 줄 시작 앞에 다른 패턴이 있어서 제거하고 싶지 않습니다.

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

도착하다

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

:일부 문자열에는 흥미로운 내용을 만들기 위해 문자가 포함될 수도 있습니다. 지금까지 나는 다음을 시도했습니다.

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

문자 와 일치하지만 :(적어도 강조 표시되므로 그렇게 추측됩니다) flag를 사용할 때 생략되지 않습니다. -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

파이썬

#!/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

관련 정보