컴퓨터의 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
)