行の開始後、一致を別のパターンに置き換えます。

行の開始後、一致を別のパターンに置き換えます。

複数の文字列行の先頭にある文字を削除しようとしていますが、行の先頭の前に別のパターンがあるので削除したくありません。

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

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

関連情報