Sed é seu amigo (o awk também pode fazer isso), você pode usar esse código (supondo que cada linha correspondida tenha uma linha do tempo):
sed '$!N;/echo 2/!P;D' "$HISTFILE" > /tmp/history
ou para fazer isso diretamente no arquivo de histórico:
sed -i '$!N;/echo 2/!P;D' "$HISTFILE"
O exemplo que você tem se tornará:
#1517681911
echo 1
#1517681931
echo 3
Uma correspondência mais restritiva: apaga apenas linhas de tempo reais antes do padrão (linhas de correspondência que têm um campo que é um # seguido por dez dígitos)
awk -vp="echo 2" ' {b=$0};b~p{next}
NF=1 && b~/#[0-9]{10}/{a=b;next}
{print(a RS b)}
' "$HISTFILE"