Linux

grep 用於不在模式之後的行

  • August 24, 2020

我正在嘗試查找文件的所有行都不遵循特定模式。

一段時間以來,我在history使用 GNU bash(版本 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應該只列印每組連續相同行中的一個。

引用自:https://unix.stackexchange.com/questions/604842