~/.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