sed 표현식 수정

sed 표현식 수정

저는 다양한 소스의 "호스트" 파일을 사용하고 있으며 일부 사이트의 차단을 해제하려면 다음 SED 코드를 사용합니다.

sed -i '/0.0.0.0 internet.com/s/^/#/g' /tmp/hosts

결과:

앞에 #이 붙는다

0.0.0.0 internet.com

뿐만 아니라

0.0.0.0 internet.com.site

나는 그것을 고쳐야한다.

답변1

전체 행만 일치시키려면 전체 행을 지정하십시오.

sed -i '/^0.0.0.0 internet.com$/s/^/#/g' /tmp/hosts

이는 ^대체를 위한 검색 패턴에서 이미 사용하고 있는 것처럼 라인 시작을 의미합니다.

라인의 끝을 의미 $합니다.

따라서 부분 문자열로만 포함하는 줄이 아니라 ^0.0.0.0 internet.com$정확히 일치하는 줄만 일치합니다 .0.0.0.0 internet.com

답변2

여기 내가 사용하는 것이 있습니다. 별칭이 포함된 항목도 처리합니다.

$ cat -vet hosts
0.0.0.0 internet.com internet$
0.0.0.0 internet.com^Iinternet$
0.0.0.0 internet.com$
0.0.0.0 internet.com.site$

$ sed  's/^0.0.0.0 internet.com\( \|\t\|$\)/# &/' hosts
# 0.0.0.0 internet.com internet
# 0.0.0.0 internet.com  internet
# 0.0.0.0 internet.com
0.0.0.0 internet.com.site

분명히 필요한 경우 여러 공백을 처리하도록 쉽게 개선될 수 있습니다.

관련 정보