linux命令行替换文件内容

哈,这个替换命令的说明听起来像是电脑操作新手在教别人怎么用命令行工具。
我来帮你把这个替换成更口语化的表达:
1 . 想用tr命令来换文字?得这样写:[root@localhostss1 ] tr '1 1 1 ' '2 2 2 2 2 2 ' < aa>注意啦,这里要用尖括号 < 来告诉电脑从文件aa.txt里读取内容哦。

2 . 用sed命令替换文字,也是这么玩儿:[root@localhostss1 ] sed 's/wyf/wzw/g' ./person.txt。
这个命令里,wyf是你想换掉的词,wzw是你要替换成的词。
g这个标志是关键,它告诉sed把文件里所有匹配的wyf都换成wzw。

小提醒: 1 . tr命令接文件的时候有点特别,得用那个小于号 < 来指明文件来源。
2 . 用tr的时候,得把“1 1 1 ”整个替换成“2 2 2 2 2 2 ”,不是单个字符替换哦,别搞错了。
3 . sed命令的语法格式要记牢,wyf和wzw要放在正确的位置,别搞混了。

如果操作的时候遇到问题,或者有啥不清楚的,直接私信我,或者关注一下,我随时帮你解答。
希望我的解释能帮到你!反正你看着办,我还在想这个问题呢。

Linux中vi的查找、替换、删除操作

说实话,vi的查找替换功能用熟了简直不要太爽,我当年第一次搞明白的时候,感觉自己打开了新世界的大门。
就拿查找来说吧,我之前在某个项目里调试代码,突然发现有个变量名写错了,几百行代码全得一个个找,急得要命。
结果一用/变量名Enter,哎哟,瞬间就跳到第一次出现的地方,再按n就往下找,N就往上找,那效率...说实话,比用鼠标点来点去不知道高多少倍。

有意思的是那些特殊字符的用法,比如/^abcEnter查以abc开头的行,我在配置文件改日志路径的时候就常用这个,/test$Enter查以test结尾的行,处理HTTP状态码4 04 这种特好使。
不过/^testEnter这个我踩坑过,以为能查以tabc开头的行,结果发现是直接找字符串test,当时真是傻眼了。
所以用^和$的时候,得特别留意前后不能有空格,不然会变成查"行首的test"或者"行尾的test",而不是"以test开头/结尾的整行"。

说到替换,我有个经典案例。
之前写shell脚本,Windows拷过来的文件里全是^M(Ctrl+V+Ctrl+M的转义序列),直接执行会报错。
当时我手贱,试了半天sed -e 's/^V^M//' filename,结果完全无效。
后来一查资料,才知道Linux下^M就是回车(0x0D),直接用tr -d '\r' filename或者tr -d '\01 5 ' filename就搞定了。
后来我悟了,vi里处理这种换行符问题,不如直接用系统命令来得直接,但如果你非要在vi里改,用s/^V^M//或者s/^M$//g也能行,不过得确保你输入的是Ctrl+V再按Ctrl+M,而不是直接复制粘贴那个转义符。

关于正则表达式,我建议还是默认的magic模式用着顺手。
比如查任意字符串,直接/.Enter就行,不用管点号后面跟星号要不要转义。
但有时候会碰到特殊情况,比如匹配行尾的abcabcabc,就得用://v(a.c){3 }$Enter这种,这时候就得记住v模式是啥意思——任何元字符都不转义。
反例是://m(a.c){3 }$Enter,虽然也能匹配,但看起来就复杂多了,而且点号后面跟星号还得转义,真心不推荐。

最后说个冷知识,其实用:%s/str1 /str2 /g替换全文所有str1 的时候,g放前面和放后面效果一样,都是全局替换。
但有个骚操作是g放中间,比如:%s/str1 /g/str2 /g,这会只替换str1 后面的g,前面那个g被忽略了。
我当时试这个的时候一脸懵逼,以为是vim版本bug,结果发现是这么用的,真是长见识了。
不过说实话,这种骚操作用一次就够,用多了容易把自己绕进去。