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

我记得有一次,当我处理一个旧的文本文件时,其中的 Windows 换行符 [^M] 让我头疼。
我坐在实验室的电脑前,屏幕上满是不规则的符号。
我尝试了不同的方法,最后使用vi输入:%s/^M//g。
奇迹般地,那些该死的[^M]消失了。
那是一个周末的下午,我花了大约一个小时才完成了这个任务,但那种成就感仍然令人难忘。
等等,我突然想到,如果当时有Linux tr命令行工具的话,问题或许能更快解决。

Linux如何移动复制删除带特殊文字符前缀(

说白了,Linux中带-或-的文件名确实很让人头疼,但解决办法却很简单。
我先说最重要的一点。
要创建此类文件,必须使用追加形式 echo -filename.txt。
您不能使用 touch,因为 touch --filename.txt 将用作选项。
还有一点是,使用ls .txt时,会直接报错,提示“无效选项-
'.'”。
此时必须添加一个--作为分隔符,如ls -l -
.txt,这样带-的文件才能正确列出。
还有另一个关键细节。
复制移动时还需要加上--,如cp --foo.txt /opt/。
去年我们就因为这个陷入了陷阱。
当我们使用cp foo.txt /opt/时,它立即崩溃了。
用行话来说,这称为雪崩效应。
事实上,前面的一个小小的延迟就导致了后面的一切。
一开始我以为只是LS的特例,后来发现CP和MV都想要,说实话这挺坑爹的。
让我提醒您一个简单的陷阱:不要忘记那些特殊命令,例如 --help 和 --version。
添加--后,将直接执行,不再解释参数。
建议以后处理此类文件时,加上--先尝试一下,绝对安全。

linux如何删除字符

我必须告诉你真实的故事。

前年我在上海做项目,服务器上堆满了日志,一个接一个。
客户坚持要我改,说换行太明显了,他什么也看不到。
你知道这个文件有多大吗?几十M。
我想,我需要快点做这件事,而且我需要保存原始文件,以防我出错而无法回滚。

我第一个想到的是sed。
这个东西真的很强大,正则表达式非常好用。
我使用了一个小脚本来遍历每个文件,然后使用文件名 sed -i 's/\n//g'。
-i 直接处理文件,而不将其输出到其他地方。
你看,这是一个团队完成的,多酷啊。
跑了一上午,终于跑完了。

后来有个同事得了TP,他说他更快了。
我还尝试了 tr -d '\n' newfile.txt 并且它有效。
但他告诉我,他的方法适合去除个别字符,而且非常有效。
后来我创建了一个大文件,TP卡卡了很长时间。
他说可能是因为文件太大,内存跟不上。
所以,正如你所看到的,这一切都取决于具体情况。

后来我遇到了一个情况:它是一个字符串变量,我需要删除某个模式。
我当时使用的是bash,所以不小心使用了${str//,/}参数扩展。
哎呀,我直接删了。
这是通过一行代码完成的。
我不必打开子进程,这消除了麻烦。
这个技巧在脚本中确实很方便。

所以你看sed、tr、Cut、Perl、awk和bash都是很好的工具。
关键取决于您使用它们的场景。
简单的是tr,position是cut,复杂模式是sed或perl,脚本可以直接使用bash参数进行扩展。
想一想,如果没有sed,我的项目会不会被耽误了?因此,只有选择正确的工具才能获得更高的效率。