如何在Unix下使用sed命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Unix下使用sed命令相关的知识,希望对你有一定的参考价值。

sed命令是一个十分复杂的文字处理命令,其中有很多的参数和格式,但可以实现几乎所有的字符处理需求,常用的几个参数如下。

①sed '1,3d' f1:显示除第一行和第三行之外的行,“1,3”表示第一行和第三行,“d”表示删除。

②sed '/data/d' f1:不显示包含指定字符的行。“d”表示删除,“/data/”表示匹配“data”的行。

③sed 's/data/hello/' f1:查找文档中的指定字符,替换成新字符。“s”表示替换,将包含“data”的行中的第一个“data”替换成“hello”。

④sed 's/data/&123/g' f1:查找文档中的指定字符,在其后追加字符。“g”表示行内全局替换,“&”表示追加,在所有包含“data”的行中的“data”后面追加“123”字符串。

⑤sed -n '/data/p' f1:显示包含指定字符的行。“-n”表示只打印f1文件中被sed命令处理的行,“p”表示打印输出,将包含“data”的行打印出来。

sed常用的正则表达式匹配符号下表所示。

参考技术A UNIX 系统中的 sed 命令是一个功能非常、非常之强大的文本处理器。而且和 SHELL 编程技术结合起来,可以充分发挥人的想象力。 sed 最常见的就是:各种模式的匹配和字符串替换、以及按照用户的需求筛选自己需要的内容。如果再具体的说,那就必须要仔细查看详细的 sed 技术文档、以及 SHELL 编程相关文档了。

unix sed和重定向[重复]

【中文标题】unix sed和重定向[重复]【英文标题】:unix sed and redirection [duplicate] 【发布时间】:2017-01-10 23:09:47 【问题描述】:

我正在尝试在 linux 服务器 (Ubuntu 16.04) 中使用 sed 修改文件。

这是我正在运行的代码示例:

sed 's/lineToChange/newString/' example.txt > example.txt

我觉得在执行此命令后我应该在 example.txt 中看到 newString,因为 sed 命令的结果(在没有重定向的情况下自行执行时打印 newString)被重定向以覆盖 example.txt 内容。

不幸的是,当我这样做时文件最终为空......

我的常识告诉我这应该是正确的,但很明显这里有一些我不明白的地方。

【问题讨论】:

> 具有更高的优先级。换句话说> 文件重定向将首先发生。因此,当sed 尝试处理该文件时,它会看到一个空文件。在sed 中使用-i(就地编辑)选项。例如:sed -i 's///' file 谢谢坐。这真是一个很好的解释。像你这样的 Karoly 人让其他人对在堆栈溢出问题上提出问题感到不舒服......不过感谢您的提示,因为我从来没有想过在问之前用谷歌搜索它。 【参考方案1】:

如果你想内联编辑文件,你应该使用 -i 选项:

sed -i 's/lineToChange/newString/' example.txt

这会将 sed 运行到一个新文件中并将该文件移动到 example.txt。每当您执行“>”时,您实际上清空了 example.txt,这使得 sed 可以处理它。

【讨论】:

感谢您的快速回答!虽然不赞成.... 我没有给你投反对票,指责某人这样做是很不礼貌的。

以上是关于如何在Unix下使用sed命令的主要内容,如果未能解决你的问题,请参考以下文章

unix下KSH中shell的SED命令怎样把文件中的NULL替换成空格。 (十六进制码00替换成20)

如何从 unix sed 命令读取大型机文件?

如何在 sed 的命令中使用变量?

sed常用命令总结

Mac 下如何使用sed -i命令

unix sed和重定向[重复]