【问题标题】:Sed Scripting for beginners适合初学者的 Sed 脚本
【发布时间】:2014-09-30 10:42:25
【问题描述】:

我有两个命令要放在sed 脚本中(为已经创建的文本文件添加一些标题)。两条命令如下:

sed '/TEST/i\"-TEST-"\' grades.txt
sed '/PROJECT/i\"-PROJECT-"\' grades.txt

我遇到的问题是创建实际脚本。我首先在命令行输入sed -f nameofscript.sed。从那里我使用# 输入一个开场评论,按Enter,然后输入我的命令(最后没有grades.txt)。我输入的每个命令都会回显给我。完成后,我再次输入sed -f nameofscript.sed grades.txt。似乎没有什么可以结束脚本。所以我打了control-d。当我去查看脚本(cat nameofscript.sed)时,那里什么都没有。我已经有一段时间了,所以任何帮助将不胜感激。太感谢了。

【问题讨论】:

  • 嗯... sed 不是交互式文本编辑器。您必须像编写任何其他文本文件一样使用您选择的编辑器编写脚本。
  • 感谢您的快速回答!作为 UNIX 的新手,非常感谢您的帮助。非常感谢我找到了这个网站。

标签: sed


【解决方案1】:

您使用文本编辑器创建脚本文件,然后sed -f nameofscript.sed 执行该文件。

sed -f 不启动交互式编辑器。

它通过标准输入运行sed(这就是为什么它会向您回显您的行,因为它默认打印并且您没有给它任何要执行的 sed 脚本)。

如果nameofscript.sed 不存在,那么sed -f nameofscript.sed 会在您尝试运行它时给您一条错误消息。

更明确地说,当您运行sed -f some_empty_file.sed 时,您是在告诉sed 在标准输入上运行一个空脚本。没有标准输入,所以sed 等待并监听您(通过键盘)的输入。当您输入“死空气”时,您正在输入sed 内容行。然后它通过它的脚本(它是空的)处理这些并执行默认的print 操作并将它们吐回给你。

【讨论】:

  • 明白了!所以我可以使用 VIM 编写脚本,然后键入 sed -f nameofscript.sed grades.txt 以应用该文件。我想我明白了!
  • 是的;你现在明白了。
  • 再次感谢昨天帮助我编写第一个脚本的人!我让一切正常,并且能够在文本文件上执行它。现在我正在尝试将编辑后的版本发送到一个新的文本文件,但遇到了一些问题。我正在输入: sed -f sedscriptname.sed grades.txt
  • 我想我明白了,我使用了:sed -f mysedscript.txt grades_mod.txt
  • @Chalmers 是的。 > 是重定向标准输出。 < 是重定向标准输入。 sed 接受文件名以及从标准输入读取,因此没有理由重定向输入(尽管它在您的命令中工作)但您确实需要重定向输出(如果您希望它在文件中而不是打印到屏幕)。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多