我有一个包含 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
以上命令调用sed
在 input-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/