PHP 페이지에서 arp 스캔을 실행했습니다. 내 네트워크에서 특정 장치를 검색하는 데 효과적입니다. 유일한 문제는 콜론을 제거하고 모든 문자를 대문자로 기본 설정하기 위해 mac 정보를 변경해야 한다는 것입니다.
이것은 내 명령입니다:
$output = shell_exec("sudo arp-scan --interface=eth0 --localnet --numeric --quiet| grep -e 80:82:87");
다음으로 시작하는 MAC 주소만 검색합니다.80:82:87
모든 문자를 대문자로 변경하는 sed 명령을 찾았지만 이 명령에서는 그렇지 않습니다. 어떻게 해야 하나요?
답변1
tr
다음과 같은 간단한 작업에 적합합니다.
echo '80:82:87:af:d2' | tr '[:lower:]' '[:upper:]' | tr -d ':'
답변2
awk는 패턴 일치와 대문자를 수행할 수 있습니다.그리고일회성 교체:
awk '/^80:82:87/ {gsub(/:/,""); print toupper($0)}'
답변3
sed
다음을 수행할 수 있습니다.
sed -n '/^80:82:87/ { s/;//g; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; p }'
- 이
-n
옵션은sed
명시적으로 지시하지 않는 한 입력 내용을 인쇄하지 않도록 지시합니다. - 중괄호
/^80:82:87/
안의 명령은{…}
로 시작하는 줄에서만 실행될 수 있음 을 나타냅니다80:82:87
. 이는grep
입력 또는 .grep
sed
awk
- 이
s/;//g
명령은 해당 줄에서 원하는 세미콜론을 모두 제거합니다. 콜론을 의미하는 경우 로 변경하면 됩니다s/://g
. - 이
y
명령은 모든 소문자(로마/ASCII) 문자를 대문자로 변환합니다. MAC 주소(및/또는 기타 16진수 값)만 변환해야 하는 경우y/abcdef/ABCDEF/
. - 마지막으로 수정된 행이 인쇄됩니다.
y
@jasonwryan은 지루한 명령을 , 또는 심지어 GNU sed를 사용하는 경우에만 대체 할 수 있다는 사실을 깨닫게 해주었습니다 . POSIX에는 정의가 없는 것 같습니다.s/[[:lower:]]/\U&/g
s/[[:alpha:]]/\U&/g
s/.*/\U&/
\U
답변4
나는 이것이 아마도 PHP의 문자열 조작 기능을 사용하여(당신이 사용하고 있는 것이기 때문에) 아마도 $addr = strtoupper(str_replace(":", "", $output))
.
awk를 사용하세요:
awk 'BEGIN { RS=":"; ORS = "" } { print toupper }' <<<"$mac_address"
시험:
$ mac_address="xx:yy:zz:k7:23:f0"
$ awk 'BEGIN { RS=":"; ORS = "" } { print toupper }' <<<"$mac_address"
XXYYZZK723F0
Awk 프로그램은 MAC 주소의 각 부분을 별도의 레코드로 읽고(그렇지 않으면 레코드는 일반적으로 입력 줄임) 레코드 구분 기호 없이 인쇄합니다(그렇지 않으면 출력 레코드 구분 기호의 기본값은 개행 문자입니다). 각 레코드를 인쇄하기 전에 대문자로 변환합니다.