使用here-strings追加或写入文件

时间:2017-08-14 21:59:05

标签: bash ed herestring

如何使用ed编写文件或将字符串附加到文件?

我对其他编辑有所了解,但这种特殊的写作形式在一个带有ed的bash脚本中让我很困惑:

ed fileName <<< $'a textToWriteInFile\nwq'

前一行不起作用,虽然我已阅读了一些ed手册页,但我仍然对here-strings方法感到困惑。我对here-document方法不感兴趣。

我已使用ed H myFile <<< $'a\nMy line here\n.\nwq'选项尝试H,我收到错误

H: No such file or directory

我已经创建了一个名为myFile的文件,并在我的目录中执行了sudo chmod a+wx myFile

1 个答案:

答案 0 :(得分:4)

TL; DR:

ed myFile <<< $'a\nMy line here\n.\nwq'

关于编程的一个令人遗憾的事实是,您永远无法自动执行任何您不知道如何手动执行的操作。如果您不知道如何使用ed手动添加一行,则无法通过ed和here-string自动附加一行。

因此,第一步是查找如何在ed中追加行。这是info ed

  

下面的示例会话说明了一些基本概念   用'ed'编辑。我们首先创建一个文件'sonnet',其中包含一些文件   来自莎士比亚的帮助。与shell一样,'ed'的所有输入必须是   然后是一个角色。评论以“#”开头。

 $ ed
 # The 'a' command is for appending text to the editor buffer.
 a
 No more be grieved at that which thou hast done.
 Roses have thorns, and filvers foutians mud.
 Clouds and eclipses stain both moon and sun,
 And loathsome canker lives in sweetest bud.
 .
 # Entering a single period on a line returns 'ed' to command mode.
 # Now write the buffer to the file 'sonnet' and quit:
 w sonnet
 183
 # 'ed' reports the number of characters written.
 q

好的,现在让我们调整一下,将一行附加到文件然后退出:

$ touch myFile
$ ed myFile
a
Some text here
.
wq

让我们验证它是否有效:

$ cat myFile
Some text here

耶。既然我们能够手动追加一行,我们只需要使用here-string重新创建相同的输入。我们可以使用cat来验证我们的输入是否正确:

$ cat <<< $'a\nMy line here\n.\nwq'
a
My line here
.
wq

是的,这正是我们使用的输入。现在我们可以将其插入ed

$ echo "Existing contents" > myFile
$ ed myFile <<< $'a\nMy line here\n.\nwq'
18
31
$ cat myFile
Existing contents
My line here