SED不是取代线(sed not replacing lines)

2019-07-18 19:16发布

我有一个1行文字,称为文件output 。 我有写访问该文件。 我可以从它没有任何问题的编辑更改。

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

我想要做的就是替换该文件用一个新值的第一个(也是唯一一个)线,无论是1或0。在我看来,中美战略经济对话应该是为这个完美的:

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

但它永远不会改变的文件。 我已经试过了分布在2号线的反斜杠,并用双引号,但我不能把它摆在第一线0(或其他任何东西)。

Answer 1:

桑达运行在流和打印输出到标准输出。

它不修改输入文件。

它通常使用这样的,当你想捕捉它在文件的输出:

#
# 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不同。

在某些平台上,您必须指定一个备份扩展(别人你不必)。



Answer 2:

由于这是一个非常简单的文件,sed的,实际上可能是矫枉过正。 这听起来像你想要的文件有一个字符:“0”或“1”。

它可以做出更好的意义在这种情况下只覆盖该文件,而不是对其进行编辑,如:

echo "1" > output 

要么

echo "0" > output


文章来源: sed not replacing lines
标签: bash replace sed