使用“sed”查找和替换

roo*_*roo 392 sed shell-script text-processing

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

假设我想对文件“hello.txt”(在与提示相同的目录中)进行操作。任何包含“很少”一词的地方,都应改为“asd”。命令会是什么样的?

Moh*_*dar 712

sed小号treamitor中,你可以使用|(管)发送标准流通过(STDIN和STDOUT明确)sed和编程改变它们的飞行,使得它在Unix哲学传统的一个方便的工具; 但也可以使用-i下面提到的参数直接编辑文件。
考虑以下几点

sed -i -e 's/few/asd/g' hello.txt
Run Code Online (Sandbox Code Playgroud)

s/用于小号ubstitute所找到的表达fewasd

少数,勇敢。


asd,勇敢的人。

/g代表“全局”,意思是对整条线执行此操作。如果您省略了/g(with s/few/asd/,无论如何总是需要三个斜杠) 并few在同一行上出现两次,只有第一个few更改为asd

男人少,女人少,勇敢。


asd 男人,少数女人,勇敢的人。

这在某些情况下很有用,例如更改行开头的特殊字符(例如,用水平制表符替换一些人用来引用电子邮件线程中先前材料的大于号,同时在行的后面留下引用的代数不等式未触及),但在您指定发生的任何地方 few都应该被替换的示例中,请确保您有那个/g.

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

-i选项用于编辑N将在文件上hello.txt

-e选项指示ë XPRESSION /命令来运行,在这种情况下s/

注意:-i -e用于搜索/替换很重要。如果这样做-ie,则为每个附加了字母“e”的文件创建备份。

  • @roo 在 mac os x 上,使用 `-ie` 我得到那个文件 `foo` 被备份为 `fooe`。 (12认同)
  • 在 Mac 上,-i -e 创建一个新文件,并在名称后附加 -e。这似乎适用于 bash: sed "-i" "" "-e" "s/few/asd/g" "somefile.xml" (9认同)
  • 建议进行编辑以将 -e 标志添加到 sed。-e 标志是可选的,只要要执行的命令首先出现,没有命令文件和命令参数,并且只有一个命令。 (7认同)
  • 这个命令给了我一个以 -e 结尾的额外文件,为什么??: index.html-e **sed -i -e 's/n/d/g' index.html** (3认同)
  • 我正在使用 OS X,这是值得的,但这是我得到的错误: sed: 1: "hello.txt": invalid command code 。 (2认同)

Per*_*ulf 84

sed -i 's/fea/asd/g'  hello.txt
Run Code Online (Sandbox Code Playgroud)

g:全球

s:替代

-i : 实时文件就地工作

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