왜 이렇게 grep을 할 수 없습니까?

왜 이렇게 grep을 할 수 없습니까?

다음 파일에서 "disable=yes" 행을 "disable=no"로 변경하고 싶습니다.

[root@centos2 ~]# cat /etc/xinetd.d/tftp
service tftp
{
    ...
    server_args             = -s /var/lib/tftpboot
    disable                 = yes
    per_source              = 11
    ...
}  

나는 이것을 시도했습니다 :

[root@centos2 ~]# grep 'disable                 = yes' /etc/xinetd.d/tftp
[root@centos2 ~]#

마우스로 공백을 복사하면 아무것도 인식되지 않습니다.

"disable"과 "=" 사이의 요소가 무엇인지 아는 이유와 방법은 무엇입니까? 몇 칸인가요? 시트?

다음 정규식을 사용하여 grep할 수 있다는 것을 알고 있습니다.

[root@centos2 xinetd.d]# grep -E 'disable.+= yes' /etc/xinetd.d/tftp
    disable                 = yes
[root@centos2 xinetd.d]#

마지막으로, 다음보다 sed를 사용하여 "yes"를 "no"로 바꾸는 더 좋은 방법이 있습니까?

[root@centos2 xinetd.d]# sed -r 's/disable.+= yes/disable                 = 
no/g' /etc/xinetd.d/tftp

service tftp
{
    ...
    server_args             = -s /var/lib/tftpboot
    disable                 = no
    per_source              = 11
    ...
}

편집하다:

@ilkkachu 덕분에 od 명령의 결과

[root@centos2 xinetd.d]# < /etc/xinetd.d/tftp grep disable | od -c
0000000  \t   d   i   s   a   b   l   e
0000020                                       =       y   e   s  \n
0000037

답변1

공백은 종종 "공백"이라고 불리며 공백뿐만 아니라 탭(및 기타 "공백" 문자)도 포함할 수 있습니다. 정규식에서는 일반적으로 [[:space:]]또는 \s(RE 엔진에 따라)를 사용하여 참조할 수 있습니다.수평의[[:blank:]](공백, 탭 및 너비 가 다른 일부 유니코드 간격 문자 \h)수직의줄 바꿈 문자(예: 줄 바꿈, 폼 피드, 세로 탭 또는 캐리지 리턴) 대체는 때때로 Microsoft 텍스트 파일의 허위 캐리지 리턴을 무시하는 [[:space:]]데 사용됩니다 .[[:blank:]]

대체할 수 없습니다 grep. 이는 단지 검색 도구일 뿐입니다. 대신 다음 yesno같은 명령을 사용할 수 있습니다.

sed '/disable\>/s/\<yes\>/no/' /etc/xinetd.d/tftp

이는 해당 단어를 단어가 포함된 행 으로 sed대체(변경)하라는 의미입니다 . ( (원래 / 정규 표현식 연산자)는 일부 구현에서 단어 종료를 강제합니다.yesnodisable\>exvised공백으로 구분된 단어, ))도 일치합니다 disable-option. 이는 공백 문제를 완전히 편리하게 회피합니다.


참고: 와 같은 줄의 경우 eyes yes무한 yes교체가 첫 번째 인스턴스에 적용되고 yes뒤에 남습니다 eno yes. 그래서 나는 \<yes\>단지 대신에 를 사용합니다 yes.

답변2

"disable"과 "=" 사이의 요소가 무엇인지 아는 이유와 방법은 무엇입니까? 몇 칸인가요? 시트?

라벨일 수도 있습니다. 당신은 다음과 같은 것을 사용할 수 있습니다

< /etc/xinetd.d/tftp grep disable | od -c

확인하다. 탭은 공백으로, 공백은 공백으로 표시됩니다 \t.

답변3

grep 대안을 사용해 보세요화면~에서선별 도구.org- 스마트 정규식 패턴 일치를 위해 steriods를 grep합니다.

관련 정보