本文最后更新于 2023年9月17日 上午
文章简介
本文章介绍使用tr
和sed
命令行工具在Mac和Linux上的使用教程。
tr命令–字符处理
tr
命令适用于Mac和所有Linux发行版本
基本
1 2
| tr [- Option] string1 string2 tr [- Option] string1
|
Option
可以为:
- -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
- -d 删除字符串1中所有输入字符。
- -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
如:替换abc
文本内b
的为c
:
输入:
输出:
替换本地文件内字符
tr
后可接文件参数,为文件绝对或相对路径。
如:将本路径下的1.txt文件内的a全部替换为b并存储为2.txt:
使用cat
命令查看本地1.txt
内文件内容:
输出:
使用tr
命令替换a为b并储存为2.txt
:
使用cat
命令查看2.txt
文件里的内容:
输出:
另外,tr
命令可以替换掉换行和空格字符:
tr
替换换行或者回车时,可以这样:
就是把换行替换为,
More
大小写转换
大小写转换,也可以通过[:lower][:upper]参数来实现。例如使用如下命令:
比如,本地before.txt
文件内,我们用cat
命令进行查看:
输出:
我们可以使用tr
命令,全局小写转大写并储存为after.txt
:
1
| tr [:lower:] [:upper:] < before.txt > after.txt
|
Warning
tr
命令为字符替换命令,不是字符串替换命令。如:尝试替换json文件内,overcode
为mintimate
的话:
原json内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| { "app": { "version": "8.0.4" ,"versionCode": "4768" ,"link": "http://www.overcode.cn/fileHost/download/MTM0Mzg5ODc0MDIzODMxOTYxOA==" ,"note": "https://gitee.com/mintimate/magick_custom_update_source/raw/master/note/app/manager.md" }, "uninstaller": { "link": "http://www.overcode.cn/fileHost/download/MTM0MDMwNDU3MDI0ODY1NDg1MA==" }, "magisk": { "version": "20.4" ,"versionCode": "20400" ,"link": "http://www.overcode.cn/fileHost/download/MTMzOTA0Njg4NDc2MDY2NjExMw==" ,"note": "https://gitee.com/mintimate/magick_custom_update_source/raw/master/note/installer/installer_stable.md" ,"md5": "9503fc692e03d60cb8897ff2753c193f" }, "stub": { "versionCode": "15", "link": "http://www.overcode.cn/fileHost/download/MTM0Mzg5ODY2NDkxNzAwODM4NQ==" }, "message":{ "Power By":"Mintimate" ,"My Bilibili":"Mintimate" ,"My Coolapk":"Mintimate" ,"Blog":"https://www.mintimate.cn" } }
|
替换后效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| { "app": { "ittsimn": "8.0.4" ,"ittsimnCmat": "4768" ,"link": "http://www.mittimat.in/filtHmst/amwnlmaa/MTM0Mzg5ODi0MDIzODMxOTYxOA==" ,"nmtt": "https://gittt.imm/mintimatt/magiik_iustmm_upaatt_smutit/taw/masttt/nmtt/app/managtt.ma" }, "uninstalltt": { "link": "http://www.mittimat.in/filtHmst/amwnlmaa/MTM0MDMwNDU3MDI0ODY1NDg1MA==" }, "magisk": { "ittsimn": "20.4" ,"ittsimnCmat": "20400" ,"link": "http://www.mittimat.in/filtHmst/amwnlmaa/MTMzOTA0Njg4NDi2MDY2NjExMw==" ,"nmtt": "https://gittt.imm/mintimatt/magiik_iustmm_upaatt_smutit/taw/masttt/nmtt/installtt/installtt_stablt.ma" ,"ma5": "9503fi692t03a60ib8897ff2753i193f" }, "stub": { "ittsimnCmat": "15", "link": "http://www.mittimat.in/filtHmst/amwnlmaa/MTM0Mzg5ODY2NDkxNzAwODM4NQ==" }, "mtssagt":{ "Pmwtt By":"Mintimatt" ,"My Bilibili":"Mintimatt" ,"My Cmmlapk":"Mintimatt" ,"Blmg":"https://www.mintimatt.in" } }
|
可以看到,并不是overcode替换为mintimate,因为tr
命令是字符替换,非字符串替换;如果是需要字符串替换,可以使用下文的sed
命令。
sed命令-字符串处理
基本
删除
可以使用sed来删除文本:
1 2 3 4 5
| sed '2,5d' New.txt
sed '3,$d'
|
这样删除是将内容输出到屏幕上,需要覆盖原文件,加上-i
参数。
替换
sed s 替换脚本命令
此命令的基本格式为:
1
| [address]s/[string]/[replacestring]/[flag]
|
其中:
- [address]:操作行数
- [string]:需要替换的字符串
- [replacestring]:需要替换成的字符串
- [flag]:标记
flag的标记详解 |
功能 |
n |
1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记; |
g |
对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A; |
p |
会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。 |
w file |
将缓冲区中的内容写到指定的 file 文件中; |
& |
用正则表达式匹配的内容进行替换; |
\n |
匹配第 n 个子串,该子串之前在 pattern 中用 () 指定。 |
\ |
转义(转义替换部分包含:&、\ 等) |
比如:
1 2 3 4 5 6 7 8 9 10 11
| # sed 编辑器只替换data0.log中每行中第 2 次出现的Linux改为Mac sed 's/Linux/Mac/2' data0.log
# 替换第1行的每一个字符 sed '1s/./bug/g' data1.log
# 替换第1行的第1个字符 sed '1s/./bug/' data2.log
# 替换第1行的第5个字符 sed '1s/./bug/5' data3.log
|
其中,也可以使用转义替换:
1 2
| # 替换http: sed "s/http:\/\/\//https:\/\/mintimate.cn\//g" New.txt
|
替换并保存原文件:
1 2 3 4 5 6 7
|
sed -i 's/overcode.cn/mintimate.cn/g' New.txt
sed -i '' 's/overcode.cn/mintimate.cn/g' New.txt
|
因为Mac基于unix,所以部分命令和Linux还是不一样的
递归目录替换
这个递归目录替换文件内的字符串,还是挺简单的。只需要配合grep
即可
使用grep
查找包含字符串的文件:
1 2
| grep “HelloWorld” -rl *
|
配合sed
命令:
1 2 3 4 5
| # Mac sed -i "" "s/HelloWorld/你好世界/g" `grep "HelloWorld" -rl *`
# Linux sed -i "s/HelloWorld/你好世界/g" `grep "HelloWorld" -rl *`
|
声明
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1upjuhny9163i