
다음 파일에서 "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
...
}
편집하다 :
od 명령의 결과 @ilkkachu에게 감사드립니다
[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
. 이는 단지 검색 도구일 뿐입니다. 대신에 yes
다음 no
과 같은 명령을 사용할 수 있습니다.
sed '/disable\>/s/\<yes\>/no/' /etc/xinetd.d/tftp
이는 단어가 포함된 모든 줄에서 sed
단어를 로 대체(변경)하라는 yes
의미 입니다 . ( 일부 구현에서는 (초기 / 정규식 연산자) 는 단어 끝을 강제로 표시합니다.no
disable
\>
ex
vi
sed
공백으로 구분된 단어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입니다.