bash - sed 不替换行

标签 bash replace sed

我有一个包含 1 行文本的文件,名为 output。我有文件的写入权限。我可以毫无问题地从编辑器中更改它。

$ cat output
1
$ ls -l o*
-rw-rw-r-- 1 jbk jbk 2 Jan 27 18:44 output

我想做的是用新值替换此文件中的第一行(也是唯一一行),1 或 0。在我看来,sed 应该是完美的选择:

$ sed '1 c\ 0' output
 0
$ cat output
1

但它永远不会更改文件。我试过它在反斜杠处分两行,并用双引号引起来,但我无法让它在第一行放置 0(或其他任何内容)。

最佳答案

Sed 对流进行操作并将其输出打印到标准输出。

它不修改输入文件。

当您想在文件中捕获其输出时,通常会这样使用:

#
# replace every occurrence of foo with bar in input-file
#
sed 's/foo/bar/g' input-file > output-file

以上命令调用sedinput-file并将输出重定向到名为output-file 的新文件.

根据您的平台,您可以使用 sed 的 -i就地修改文件的选项:

sed -i.bak 's/foo/bar/g' input-file

注意:

并非所有版本的 sed 都支持 -i .

此外,不同版本的sed 实现-i不同。

在某些平台上,您必须指定一个备份扩展(在其他平台上则不必)。

关于bash - sed 不替换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553804/

相关文章:

Linux - 在文件名中添加创建日期或日期时间

macos - 如何运行 fswatch 来调用带有静态参数的程序?

linux - 保存第一行 - Linux Shell 脚本

用同一数据框中另一列的值替换单元格的 NA 值

c# - 使用 Excel Interop c# 将单词替换为粗体单词

bash - 从 Cloudera Hadoop 中删除指定天数内的目录

regex - 替换 R 中的单个反斜杠

linux - 提取部分文件名

linux - 使用 SED 在 Linux 文件中间插入行时遇到一些问题

linux - 从 awk 中排除列