8

我有一个包含 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

但它永远不会更改文件。我已经尝试将它分布在反斜杠上的 2 行中,并使用双引号,但我无法让它在第一行中放置 0(或其他任何内容)。

4

2 回答 2

13

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

它不会修改输入文件。

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

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

上面的命令调用sedoninput-file并将输出重定向到一个名为output-file.

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

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

笔记:

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

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

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

于 2013-01-28T00:13:58.767 回答
2

由于这是一个非常简单的文件,因此 sed 实际上可能有点矫枉过正。听起来您希望文件只有一个字符:“0”或“1”。

在这种情况下,只覆盖文件而不是编辑它可能更有意义,例如:

echo "1" > output 

或者

echo "0" > output
于 2014-01-24T18:31:03.367 回答