구두점을 제거하려면 sed가 필요합니다.

구두점을 제거하려면 sed가 필요합니다.

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입력 또는 .grepsedawk
  • s/;//g명령은 해당 줄에서 원하는 세미콜론을 모두 제거합니다. 콜론을 의미하는 경우 로 변경하면 됩니다 s/://g.
  • y명령은 모든 소문자(로마/ASCII) 문자를 대문자로 변환합니다. MAC 주소(및/또는 기타 16진수 값)만 변환해야 하는 경우 y/abcdef/ABCDEF/.
  • 마지막으로 수정된 행이 인쇄됩니다.

y@jasonwryan은 지루한 명령을 , 또는 심지어 GNU sed를 사용하는 경우에만 대체 할 수 있다는 사실을 깨닫게 해주었습니다 . POSIX에는 정의가 없는 것 같습니다.s/[[:lower:]]/\U&/gs/[[:alpha:]]/\U&/gs/.*/\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 주소의 각 부분을 별도의 레코드로 읽고(그렇지 않으면 레코드는 일반적으로 입력 줄임) 레코드 구분 기호 없이 인쇄합니다(그렇지 않으면 출력 레코드 구분 기호의 기본값은 개행 문자입니다). 각 레코드를 인쇄하기 전에 대문자로 변환합니다.

관련 정보