^
统计文件重复行 .sh
linux
sort test.txt | uniq -c | sort -rn
ヽ(✿゚▽゚)ノ .md
jojo,美少女战士
[#sailormoonredraw アしや(芦谷)耕平](https://twitter.com/asikoh009/status/1262059435012157440)

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/ZxlbFrUFZNPpMdvIprdF.jpg)
prepare-commit-msg 提交信息附带分支名 .sh
git,hook
#!/bin/sh
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

if [ -z "$BRANCHES_TO_SKIP" ]; then
          BRANCHES_TO_SKIP=(master)
fi

BRANCH_NAME=$(git symbolic-ref --short HEAD)

BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "\[$BRANCH_NAME\]" $1)

if [ -n "$BRANCH_NAME" ] && ! [[ $BRANCH_EXCLUDED -eq 1 ]] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
          sed -i.bak -e "1s/^/$BRANCH_NAME /" $COMMIT_MSG_FILE
fi
kenshi aqua .md
aqua
![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/olylErogvBWFgPYrVGel.jpg)
rabbit aqua .md
auqa
<https://twitter.com/umaiyo_puyoman/status/1260173067067637762>

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/MHHIDoUdAkmqjaaEXJxD.jpg)
为什么凑dd总是这么喜欢玩jojo梗呢 .md
aqua
<https://t.bilibili.com/387839811738348211>

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/nvyUTjfaCHhZJVDQHDXp.jpg)
docker容器查看宿主机ip .sh
docker
/sbin/ip route|awk '/default/ { print $3 }'
ssh 端口转发 .sh
linux
ssh -N -L 3306:localhost:3306 root@xx.xx
读书 .md
《了不起的盖茨比》
>[book] All the bright,precious things fade so fast.And they don’t come back.
所有的光鲜靓丽都敌不过时间,并且一去不复返。
零宽断言 .md
regex,正则
顾名思义,零宽断言不占任何字符,仅用来断言

* `(?=)` 表示正向断言,true
* `(!=)` 表示负向断言,false

### 先行零宽断言

```
// 匹配ab后为或不为c,但c不会被该正则匹配
ab(?=c)
ab(?!c)
// 注意这里断言宽度为0,只断言这里是个a,然后匹配ab,才不是匹配aab
(?=a)ab
// 所以下面的正则是匹配不了任何字符串的
(?=b)ab
```

### 后发零宽断言

```
// 断言前面是个a,然后匹配之后的ab,也就是用来匹配aab里的ab
(?<=a)ab
// 用在markdown.js里的,匹配开头不为\转义的`code`
(?<!\\)(`+)([^`]|[^`].*?[^`])\1(?!`)
```

>[danger] 写好后才发现后发零宽负向断言只有chrome支持

只好改回以前的版本了

```
([^\\`]|^)(`+)([^`]|[^`].*?[^`])\2(?!`)
```