/var/log/boot.log에서 제어 문자 제거

/var/log/boot.log에서 제어 문자 제거

서버가 켜지거나 꺼질 때 sysadmins 그룹에 이메일을 보내는 스크립트가 있습니다. 이메일에는 /var/log/messages,, 등 몇 가지 중요한 로그 덤프가 포함되어 있습니다 /var/log/secure. /var/log/boot.log여기 /var/log/boot.log에는 일부 특수 문자가 포함되어 있으며 색상 및 탭 지정을 위한 일부 특수 서식 문자가 포함되어 있기 때문에 이메일로 보낼 때 깨져서 보일 것입니다. 이러한 특수 문자를 제거하여 읽을 수 있게 하려면 어떻게 해야 합니까?

sed를 사용하여 문자를 제거할 수 있다는 것을 알고 있지만 간단하고 우아한 솔루션을 찾고 있습니다.

( /var/log/boot.logCentOS 6.x부터)

내 덤프는 다음과 같습니다 /var/log/boot/.log.

[root@vagrant ~]# cat -v /var/log/boot.log 
^[%G            Welcome to ^[[0;36mCentOS^[[0;39m ^M
Starting udev: ^[%G^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Setting hostname vagrant:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Setting up Logical Volume Management:   5 logical volume(s) in volume group "vgdynamic" now active^M
  3 logical volume(s) in volume group "vgstatic" now active^M
^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Checking filesystems^M
/dev/mapper/vgstatic-lvroot: clean, 8102/884736 files, 175959/3537920 blocks^M
/dev/sda1: clean, 44/32768 files, 17226/131072 blocks^M
/dev/mapper/vgdynamic-lvhome: clean, 10280/196608 files, 74141/786432 blocks^M
/dev/mapper/vgdynamic-lvopt: clean, 932/655360 files, 104046/2620416 blocks^M
/dev/mapper/vgstatic-lvtmp: clean, 12/131072 files, 25386/524288 blocks^M
/dev/mapper/vgstatic-lvusr: clean, 41785/262144 files, 236524/1048576 blocks^M
/dev/mapper/vgdynamic-lvvar: clean, 1989/393216 files, 93057/1572864 blocks^M
/dev/mapper/vgdynamic-lvvarlog: clean, 55/49152 files, 8030/196608 blocks^M
/dev/mapper/vgdynamic-lvaudit: clean, 14/65536 files, 73366/262144 blocks^M
^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Remounting root filesystem in read-write mode:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Mounting local filesystems:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Enabling /etc/fstab swaps:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Entering non-interactive startup^M
Calling the system activity data collector (sadc)... ^M
Starting monitoring for VG vgdynamic:   5 logical volume(s) in volume group "vgdynamic" monitored^M
^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting monitoring for VG vgstatic:   3 logical volume(s) in volume group "vgstatic" monitored^M
^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Bringing up loopback interface:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Bringing up interface eth0:  ^M
Determining IP information for eth0... done.^M
^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting auditd: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting system logger: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting lwsmd: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Mounting filesystems:  ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Retrigger failed udev events^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting the VirtualBox Guest Additions ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting VirtualBox Guest Addition service ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting sshd: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting ntpd: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting crond: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
Starting atd: ^[[60G[^[[0;32m  OK  ^[[0;39m]^M^M
[root@vagrant ~]# 

답변1

먼저 더 복잡한(더 긴) 패턴으로 시작해야 합니다. 제어 문자로만 시작하면 나머지도 일반 텍스트의 패턴과 일치할 수 있습니다. 속도가 최우선 순위가 아닌 경우 처리를 여러 문으로 분할하면 디버그하기가 더 쉽고 삭제 순서를 더 쉽게 제어할 수 있습니다.

이것색상 이스케이프 시퀀스^[다음 을 사용 하여 삭제할 m수 있습니다 sed.

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m//g"

다른 모드는 ^[(위치 커서)로 시작하고 끝납니다:G

sed -r "s/\x1B\[.*G//g"

나머지 제어 문자는 다음과 일치해야 합니다.

sed 's/[[:cntrl:]]//g' 

다음으로 결합:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?m//g" /var/log/boot.log | \
   sed -r "s/\x1B\[.*G//g" | \
   sed 's/[[:cntrl:]]//g'

그것이 우아함 인지 코끼리인지 보는 사람의 의견이 다릅니다.

답변2

어쩌면 이 명령이 dos2unix당신이 찾고 있는 것일 수도 있습니다.

관련 정보