슬래시가 5개 있는 sed 명령

슬래시가 5개 있는 sed 명령

이것이 무엇을 해야 할지 아시나요?

grep -lr . | xargs sed -i '' -e '/ifcfg-wlan0/!s/wlan0/<name of the device>/g'

슬래시가 5개 있는 명령을 본 적이 없으며 sed이에 대한 문서도 찾을 수 없습니다.

답변1

명령이자 조건이라고 생각하세요. 이는 " 행이 일치 wlan0하지 않는 한 모든 항목을 대체합니다 "를 의미합니다. 또는 더 정확하게 말하면 "이 줄이 와 일치하면 로 바꾸지 마십시오 "를 의미하므로 확장하여 일치하지 않는 줄에서 바꾸십시오 .<name of the device>ifcfg-wlan0ifcfg-wlan0wlan0<name of the device>ifcfg-wlan0

이것은 내 GNU에 다음과 같이 문서화되어 있는 이해 가능한 많은 "주소" sed, 특히 정규식 주소 중 하나입니다 .man sedsed

/정규식/

정규식 regexp와 일치하는 행과 일치합니다. 일치는 현재 패턴 공간에서 수행되며 다음과 같은 명령을 사용하여 수정할 수 있습니다 s///.

!다음 문을 부정하는 방법 도 알고 있다면 이를 /ifcfg-wlan0/!s/wlan0/<name of the device>/g'다음 의사 코드로 바꿀 수 있습니다.

unless /ifcfg-wlan0/ {
   s/wlan0/<name of the device>/g
}

마지막으로 명확성을 위해 일부 공백이 추가되어 실행됩니다.

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n'
wlan0
ifcfg-wlan0
wlan0

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n' | 
    sed -e '/ifcfg-wlan0/ ! s/wlan0/<name of the device>/g'
<name of the device>
ifcfg-wlan0
<name of the device>

관련 정보