grep 用於不在模式之後的行
我正在嘗試查找文件的所有行都不遵循特定模式。
一段時間以來,我在
history
使用 GNUbash
(版本 4 和 5)時遇到了問題,其中命令重複出現。我認為這是因為.bashrc
我有以下行:PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"
並且由於我使用的是終端多路復用器(
screen
和/或tmux
),因此上述命令被執行了多次(因此echo $PROMPT_COMMAND
導致history -a; history -n; history -a; history -n;
在某些情況下(尤其是同時在不同的窗格/視窗/框架/緩衝區上執行操作時),我輸入的最後一個命令在我的
~/.bash_history
. 這導致瞭如下條目:#1596110297 yadm list -a | xargs -t ls -l yadm list -a | xargs -t ls -l
不用說,這很煩人。
我只是(希望)找到了更正:這並沒有解決history
-issue 的修復方法(通過將命令更改為PROMPT_COMMAND="history -a; history -n
)但history
.現在我想擺脫重複的條目。
因此,我目前正在嘗試找到一個正則表達式來標記除以開頭的
#
行和之後的一行之外的所有內容。我的第一個想法是結合grep -v
(反轉選擇)和grep -A 1
(在匹配模式之後再獲得一行)。但grep -v "^#" -A 1 ~/.bash_history
沒有產生我希望的結果。
因此我的問題是:有沒有人知道如何使用
grep
?如果不是:我如何使用其他工具(、、…)來完成此sed
操作awk
?
據我了解
grep -v "^#" -A 1
,意味著列印不以井號開頭的行,並且每行後一行。但是你不想要相反的,列印以井號開頭的行,然後列印一行嗎*?*給定一個測試文件:
#123 echo this echo this #456 echo that echo that echo that #789 echo third
grep -A1 ^# history.txt |grep -vxFe --
印刷:#123 echo this #456 echo that #789 echo third
第二個
grep
是擺脫組分隔符grep -A
列印。或者
uniq history.txt
應該只列印每組連續相同行中的一個。