我知道这个问题以前可能已经回答过。我在各个地方都看到过很多与此相关的话题,但是对于我来说,答案通常很难提取。我正在寻找有关sed命令用法示例的帮助。

说我想对文件“ hello.txt”(与提示符位于同一目录)起作用。任何包含短语“ few”的地方,都应更改为“ asd”。该命令是什么样的?

评论

tldp.org/LDP/abs/html/x23170.html

grymoire.com/Unix/Sed.html

不应将其标记为重复项,因为引用的其他答案未显示出如何在单个文件上进行替换,而此答案却有。要么将这个答案集成到那个答案中

#1 楼

sed是流编辑器,您可以使用|(管道)通过sed发送标准流(特别是STDIN和STDOUT),并以编程方式实时更改它们,使其成为Unix哲学传统中的便捷工具;但也可以使用下面提到的-i参数直接编辑文件。请考虑以下内容:

 sed -i -e 's/few/asd/g' hello.txt
 


s/用于将找到的表达式few替换为asd


勇敢的人。


勇敢的asd,勇敢的人。


/g代表“全局”,表示对整行都这样做。如果不使用/g(对于s/few/asd/,无论如何总是需要三个斜杠)并且few在同一行上出现两次,则只有第一个few更改为asd


几个男人,几个女人,勇敢。


asd男人,几个女人,勇敢。


在某些情况下,例如更改行首的特殊字符(例如,某些人用水平制表符代替大写的符号来引用电子邮件线程中的先前材料,而稍后在行中保留引用的代数不等式),但是在您的示例中,如果您指定在任何地方发生few都应将其替换,请确保已安装/g

以下两个选项(标志)组合为一个-ie

-i选项用于在文件hello.txt上进行原位编辑。

-e选项指示表达式/逗号要运行,在这种情况下为s/

注意:使用-i -e进行搜索/替换很重要。如果执行-ie,则会为每个文件创建备份,并附加字母“ e”。

评论


我正在使用OS X,这是值得的,但这是我得到的错误:sed:1:“ hello.txt”:无效的命令代码。

–roo
14-10-6在0:41



建议进行编辑以将-e标志添加到sed。 -e标志是可选的,只要要执行的命令首先出现,没有命令文件和命令arg,并且只有一个命令。

–躲藏
15年6月15日在21:45

在Mac OS X上使用@roo,使用-ie,我得到文件foo被备份为fooe。

– jfbu
16年2月25日在16:49

该命令为我提供了一个以-e结尾的额外文件,为什么??:index.html -e sed -i -e's / n / d / g'index.html

– SuperUberDuper
16年5月14日在18:19



在Mac上,-i -e创建一个新文件,并在名称后附加-e。这似乎在bash中有效:sed“ -i”“”“ -e”“ s / few / asd / g”“ somefile.xml”

–奥利维尔·拉隆德(Olivier Lalonde)
17年5月1日19:13

#2 楼

sed -i 's/fea/asd/g'  hello.txt


g:全局

s:替代

-i:实时在文件内实时工作

评论


处理符号链接时,最好添加--follow-symlinks,否则-i会将符号链接转换为文件的(已编辑)副本。

–user7610
19年6月21日在9:16