Zombo Asked: 2018-02-04 11:04:19 +0800 CST2018-02-04 11:04:19 +0800 CST 2018-02-04 11:04:19 +0800 CST HISTTIMEFORMAT 并删除匹配的历史条目 772 我想删除与某个字符串匹配的所有历史记录条目。我找到 了这个方法: grep -v searchstring "$HISTFILE" > /tmp/history mv /tmp/history "$HISTFILE" 但它不考虑 HISTTIMEFORMAT 注释,例如: #1517681911 echo 1 #1517681918 echo 2 #1517681931 echo 3 如果我想删除“echo 2”,前面的评论也需要删除。我怎样才能做到这一点? bash shell 1 个回答 Voted Best Answer user232326 2018-02-04T13:47:03+08:002018-02-04T13:47:03+08:00 sed 是你的朋友(awk 也可以),你可以使用这个代码(假设匹配的每一行确实有一个时间线): sed '$!N;/echo 2/!P;D' "$HISTFILE" > /tmp/history 或直接在历史文件中进行: sed -i '$!N;/echo 2/!P;D' "$HISTFILE" 你的例子将变成这样: #1517681911 echo 1 #1517681931 echo 3 更具限制性的匹配:仅擦除模式之前的实际时间线(匹配具有一个字段为 # 后跟十位数字的行) awk -vp="echo 2" ' {b=$0};b~p{next} NF=1 && b~/#[0-9]{10}/{a=b;next} {print(a RS b)} ' "$HISTFILE"
sed 是你的朋友(awk 也可以),你可以使用这个代码(假设匹配的每一行确实有一个时间线):
或直接在历史文件中进行:
你的例子将变成这样:
更具限制性的匹配:仅擦除模式之前的实际时间线(匹配具有一个字段为 # 后跟十位数字的行)