정규식 구분 기호 및 여러 줄 필드를 사용하여 ~/.zsh_history에서 ZSH 명령 목록 가져오기

정규식 구분 기호 및 여러 줄 필드를 사용하여 ~/.zsh_history에서 ZSH 명령 목록 가져오기

~/.zsh_history의 ZSH 기록에서 모든 명령 목록을 가져오고 싶습니다. 이 파일의 형식은 다음과 같습니다.

: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
test'

명령은 여러 줄에 걸쳐 있을 수 있습니다. 각 명령의 초기 형식은 regex 와 동일합니다 ^: \d{10}:\d;.

이것이 원하는 출력입니다.

cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \n test'

모든 표준 Unix 명령은 공정한 게임입니다. 이것의 목적은 명령 목록을 $EDITOR에 전달하여 문서나 기사를 쉽게 선택할 수 있도록 하는 것입니다.

이것이 내가 awk에 대해 아는 것입니다. 대부분 빈 줄을 인쇄합니다.

awk -F': [0-9]{10}:[0-9];' '{ print $1 }' ~/.zsh_history

답변1

이 awk 명령을 시도해 볼 수 있나요?

$ cat a.txt
: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
test'
: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
: 1467892751:0;reload


$ awk -F\; 'NF!=1{printf("\n%s",$NF)}NF==1{printf("n %s ",$1)}' a.txt

cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \ n test'
cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \
reload

관련 정보