使用正则表达式分隔符和多行字段从 ~/.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

相关内容