linux中删除含有某字符串的行

上周有客户问我,如何在Linux中删除包含特定字符串的行?我跟他解释说这个操作其实有两个常用的命令,一个是sed,一个是grep。

我们先谈谈海关。
它不仅仅是删除线条那么简单,它还有相当强大的功能。
例如,如果要删除包含字符串“example”的行,可以使用以下命令:sed '/example/d' file.txt > output.txt。
该命令的含义是sed会在file.txt中找到包含“example”的行,然后删除这些行,最后将结果输出到output.txt。

但是,有时您可能不想输出到新文件,而是直接修改原始文件。
此时您可以使用 -i 选项,命令为:sed -i '/example/d' file.txt。
这样,file.txt中所有包含“example”的行都会被直接删除,并且直接修改原文件。

至于grip,它与sed不同。
grep主要用于搜索文件。
如果你想用grep删除包含“example”的行,就得绕点小弯路,使用命令:grep -v "example" file.txt > output.txt。
这里的-v选项是反向选择,意思是选择不包含“example”的行,然后将它们发送到output.txt。

但是grep本身不会直接改变原文件,所以如果想用grep的结果替换原文件,就必须手动操作或者与其他命令结合使用。

最后,我必须提醒大家,这两个命令非常强大。
使用时要小心,不要误删除重要数据。
最好在继续之前备份文件,或者先在测试环境中尝试一下。
无论哪种方式,都取决于你。
使用哪个命令取决于您的具体需求。
我还在思考这个问题,如何更安全地使用这些命令。

linux命令如何查找文件中的指定字符

嗯...在Linux 上的文件中搜索单词...你可以这样做。

我们来谈谈grep...这个是最直接的。
只需输入:grep“您要查找的单词”文件名。
例如,要查找 log.txt 中的所有“错误”,您可以键入:grep "error" log.txt。

哦,顺便说一句...有一些非常常用的选项。
如果大小写不重要,请使用 -i,例如grep -i "hello" file.txt,这样就可以同时找到“Hello”和“HELLO”。
如果您想查看哪些行匹配,请使用 -n,例如grep -n "error" log.txt,它会告诉你每一行是哪一行。
如果你只是想知道匹配的总数,使用 -c, grep -c "error" log.txt 就会出现一个数字。
如果要搜索目录中的所有文件,请使用 -r,例如grep -r "text" /path/,将搜索/path/中的所有文件。

所以...有时 grep 还不够。
例如,您首先要查找所有.txt 文件,然后搜索这些文件中的单词。
此时你可以使用find和grep。
首先使用find查找文件,例如:find. -type f,这是查找当前目录及子目录中的所有常规文件。
然后切换到 grep, | grep“字符串”。
组合是: 查找 。
-type f -exec grep "TODO" {};。
此 {} 代表 find 找到的每个文件名,exec 执行 grep 在该文件上搜索“TODO”。

更进一步...使用find + exec时,每次都会启动grep进程,有点慢。
特别是当有很多文件时。
此时可以使用xargs来代替exec,性能会更好。
还是同样的例子: find 。
-type f -print0 | xargs -0 grep“字符串”。
-print0 和 -0 是处理文件名中存在空格或特殊字符的情况的键。
它可以与 grep 选项一起使用。
例如,如果要显示行号,只需 grep -n 即可。
将其与以下命令结合使用: find /var/log -name ".log" -print0 |
另外...要获得更高级...您可以使用正则表达式进行搜索。
只需使用 -E 选项,例如grep -E "^[0-9 ]" data.txt。
这是为了查找 data.txt 中以数字开头的所有行。
或者直接使用egrep代替grep -E。

有时...您只想在文本文件中搜索,不想在二进制文件中看到乱码。
您可以使用 -I, grep -I "text" 选项,以便忽略二进制文件。

另一个例子...我想搜索最近修改的文件。
您可以使用 find 的 -mtime 选项,例如寻找 。
-type f -mtime -7 -exec grep "pattern" {} ;,这是在最近7 天内修改的文件中搜索“pattern”。

简而言之...只需 grep 文件“word”即可。
如果要递归搜索,请使用 grep -r "word" 路径。
如果你想找到确切的文件,请先使用find。
-name ".txt" 查找该文件,然后将其传递给 grep。
如果文件名有特殊字符,请使用 find -print0 | xargs -0。
就是这样...您可以找到您要查找的单词。