쉘 스크립트 - 특정 패턴 앞의 문자 제거

쉘 스크립트 - 특정 패턴 앞의 문자 제거

나는 내 것을 가지고 있습니다 /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

sedor awk또는 을 사용해야 한다고 생각합니다 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!

관련 정보