SED 명령 - MAC 주소

SED 명령 - MAC 주소

컴퓨터의 MAC 주소를 사용자 ID로 사용하고 있으며 사용자 ID/만료 시간을 표시하는 파일(display.txt)을 업데이트하고 싶습니다. 교체하려면 어떻게 해야 해?만료일존재하다디스플레이.txt날짜는 다음과 같습니다.날짜.txtMAC 주소에 해당합니다.

userid 부분을 성공적으로 사용했습니다.

sed -i "s/user/$(ifconfig eth0 |
                 grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}')/" \
/user/id/display.txt > /dev/null

디스플레이.txt:

UserID: user
User expiring on expdate

expdate.txt:

user                          = 00:09:34:2C:66:AB
expdate                       = 2017-05-20
user                          = 00:09:34:29:86:6C
expdate                       = 2017-08-23

가지고 싶다:

디스플레이.txt:

UserID: 00:09:34:29:86:6C
User expiring on 2017-08-23

답변1

grep과 sed를 사용하여 한 줄 솔루션을 찾았습니다.

mac=$(ifconfig eth1 | grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'); grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \1\nUser expiring on \2!g' > display.txt

그리고 테스트한 모든 Mac 주소에서 작동하는지 확인하려면 다음을 수행하세요.

mac=$(echo "00:09:34:29:86:6C") ; grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \1\nUser expiring on \2!g' > display2.txt

처음부터 출력을 생성합니다. 기존 파일을 교체해야 하는 경우 다음과 같은 템플릿 언어를 사용하는 것이 좋습니다.수염. Bash 버전이 온라인 상태입니다.GitHub

그러나 mac 주소를 재사용해야 할 것 같으므로(먼저 검색한 다음 출력) 재사용 가능성이 더 높은 bash 스크립트를 만드는 것이 좋습니다.

답변2

연결을 통한 출력 sed:

sed -e 's/user/UserID/g' expdate.txt | sed -e 's/ //g' | sed -e 's/=/: /g' | sed -e 's/expdate:/User expiring on/g' > display.txt

(확실히 이 작업은 하나만 있어도 가능합니다 sed)

관련 정보