シェルスクリプト - 特定のパターンの前の文字を削除する

シェルスクリプト - 特定のパターンの前の文字を削除する

私は私のものを持っています/etc/hosts

#192.168.54.144  name1
#192.168.54.144   name2
192.168.54.143   name3

#次のようにするために、IPアドレスIPv4の後にあるすべての文字を削除したいと思います。

192.168.54.144  name1
192.168.54.144   name2
192.168.54.143   name3

sedorawkまたはを使用する必要があると思いますcut

ありがとう

答え1

GNUの使用sed:

実際のIPのみ一致(渡す):

sed -E 's/^#(((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]))/\1/' file

または単純一致の場合は、次の数字を確認してください#

sed 's/^#\([[:digit:]]\)/\1/' file

-iこれにより、対応する編集ファイルに追加された結果が印刷されます。


perl逆参照の必要性を排除するためにLookeheadを使用することもできます。

perl -pe 's/^\#(?=[[:digit:]])//' file

答え2

注文する

sed  "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename

出力

sed  "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename
192.168.54.144  name1
192.168.54.144   name2
192.168.54.143   name3

答え3

Pythonを使ってみましたが、うまくいきます。

#!/usr/bin/python
import re
g=re.compile(r'[0-9]*\.[0-9]*\.[0-9]*')
m=open('u.txt','r')
for i in m:
    if re.search(g,i):
        print i.strip().replace("#","")

出力1

92.168.54.144  name1
192.168.54.144   name2
192.168.54.143   name3

答え4

cat myfile | tr -d '#'

シンプルなTR!

関連情報