一些零散的计算机知识
如题。
Bash
bash批量更改文件名
背景是我想把minerU转换的物理学课件文件名最后的序列号删了,这些文件名形如 MinerU_xxx_12345.md。前缀通过访达自带的重命名功能可以搞,后缀要正则匹配,访达不支持,问dpsk,得到以下bash代码:
1 | |
下面写点讲解:
*:通配符,用于文件名匹配。例如echo *会打印当前目录下所有非隐藏文件的名称列表。$:用于引用变量内容。如export name="vivo50"之后,echo $name或者echo ${name}会打印vivo50%<pattern>:去除从尾开始的最短匹配。例如export f="11_22_33",那么${f%_*}就是11_22。%%<pattern>就是最长匹配。##<pattern>:去除从头开始的最长匹配。[]:相当与test命令,不打印东西,返回状态码。比如执行[ "abc"="abc" ](注意不用==)之后,echo $?会打印0。单层括号不支持匹配,双层支持。?:储存状态码的变量,每条指令执行完之后都会被覆盖更新
mv:移动文件,因为在同目录下,相当于重命名。
让 Mac 不休眠
1 | |
然后保持终端窗口开启。
让 Mac 不熄屏
1 | |
用完后记得再设置为 0.
查 pid 和查网络连接
1 | |
写点讲解:
- 查 pid 也可以这样:
ps aux | grep Chrome lsof还可以接受-iTCP:8080,-sTCP:ESTABLISHED这样的 flag,用于筛选连接类型、端口号和连接状态- 这样的参数风格是
lsof自己实现的,它会自己解析成-i TCP 8080这样子,但用的时候不能这么写
- 这样的参数风格是
一般 pgrep 会返回一堆 pid,这时候可以
1 | |
其中 paste 用来横向合并文本:
-s: serial,同一个文件的不同行,横向合并-d: delimiter-: 从标准输入 (stdin) 读取数据
比如若有一个文件 a.txt 的内容是
1 | |
那么执行 paste -s -d , a.txt 的结果是
1 | |
查看目录大小
1 | |
Python
正则表达式
需要先引入re库:
1 | |
主要就是以下几个函数:
1 | |
下面记点正则表达式的东西:
^<pattern>表示从头匹配<pattern>$表示从尾匹配,re.search()加上这两个,很大程度上能代替re.match()和re.fullmatch()\w匹配单词字符,如数字、字母、下划线等\b匹配单词开始前或结尾后的空字符 (Matches the empty string, but only at the beginning or end of a word. A word is defined as a sequence of word characters.)
1 | |
其他用法参见这里。
NumPy
注意以下方法及其特性:
1 | |
线性代数部分:
1 | |
pip
pip install -e . 以可编辑方式安装当前目录下的包。需要有.toml文件。
conda
1 | |
Git
取消追踪目录
1 | |
-r表示递归--cached参数是关键,它告诉 Git 只移除索引中的记录,不动工作区的文件
记得相应地修改 .gitignore。 git rm 和 git add 是部分对偶的,都会改变暂存区,只是 git rm 若无 --cached 会删除工作区的文件。
修改远程仓库
1 | |
理解远程仓库
假设本地处于 main 分支,其上游分支配置为 origin/main ,跟踪远程仓库的 main 分支。
逻辑上可以认为 origin/main 就是本地的一个分支
git fetch 会拉取远程的所有分支,更新所有远程跟踪分支 origin/* 的状态。
git pull --rebase 相当于 git fetch && git rebase origin/main
git pull --no-rebase 相当于 git fetch && git merge origin/main
git pull --ff-only 相当于 git fetch && git merge --ff-only origin/main,这也是 git pull 的默认行为。
切换到远程分支
1 | |
git switch -c dev:创建 dev 分支并立刻切换到 dev
回退
git reset HEAD~1 将当前分支指针移动到上一个 commit,默认使用 --mixed 模式,因此工作区内容保持不变,但暂存区会重置。如果被回退的 commit 已经推送到远程,普通 push 会因为不是 fast-forward 而被拒绝;若强制 push,则会改写远程历史,因此共享分支通常不建议这么做。
git revert HEAD 不修改已有历史,而是创建一个新的 commit,其修改内容与 HEAD commit 的修改相反。
cherry-pick
1 | |
把指定 commit 的更改弄到当前分支来,前提是这个更改不依赖当前分支不存在的状态。
Excel
复制多个单元格的文字
Excel选中单元格复制,在别的地方粘贴出来会是图片,若是单个单元格,应该在上方编辑栏复制。若是多个单元格,可以使用
=TEXTJOIN(" ", TRUE, A1:B4) 这样的函数,选中这个函数所在的单元格,光标移动到上方编辑栏,按下 F9 即可复制文字内容。
Chrome
截长图
- F12
- Ctrl + Shift + P
- 输入 screenshot
- 选择 capture full size screenshot