이것이 무엇을 해야 할지 아시나요?
grep -lr . | xargs sed -i '' -e '/ifcfg-wlan0/!s/wlan0/<name of the device>/g'
슬래시가 5개 있는 명령을 본 적이 없으며 sed
이에 대한 문서도 찾을 수 없습니다.
답변1
명령이자 조건이라고 생각하세요. 이는 " 행이 일치 wlan0
하지 않는 한 모든 항목을 대체합니다 "를 의미합니다. 또는 더 정확하게 말하면 "이 줄이 와 일치하면 로 바꾸지 마십시오 "를 의미하므로 확장하여 일치하지 않는 줄에서 바꾸십시오 .<name of the device>
ifcfg-wlan0
ifcfg-wlan0
wlan0
<name of the device>
ifcfg-wlan0
이것은 내 GNU에 다음과 같이 문서화되어 있는 이해 가능한 많은 "주소" sed
, 특히 정규식 주소 중 하나입니다 .man sed
sed
/정규식/
정규식 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>