如何使用单个命令编辑多个文本文件?

Tom*_*agk 23 command-line text-processing

我想删除多个文本文件的第一行并将其替换为另一行。有没有办法使用终端来做到这一点?

我知道如何使用 vim,有没有办法让它自动化?我想避免手动执行(如分别编辑每个文件)。

如果可能的话,我想避免安装新的库(特别是对于我认为非常简单的类似的东西 - 但我可能是错的)。

提前致谢!

hee*_*ayl 25

您可以使用sed

sed -i.bak '1s/^.*$/new line/' *.txt
Run Code Online (Sandbox Code Playgroud)

这将用.txt文本替换当前目录中所有文件的第一行new line,更改它以满足您的需要。

此外,原始文件将使用.bak扩展名进行备份,如果您不想要,只需使用:

sed -i '1s/^.*$/new line/' *.txt
Run Code Online (Sandbox Code Playgroud)


mur*_*uru 14

好吧,使用vim它自己:

vim -Nesc 'bufdo call setline(1,"This is the replacement.") | wq' file1 file2 ...
Run Code Online (Sandbox Code Playgroud)

这是做什么的:

  • setline (n, text),很好,是一个函数,集线ntext
  • call 需要调用函数。
  • bufdo 用于跨缓冲区重复命令(没有范围,它作用于所有缓冲区)。
  • wq保存并退出缓冲区。我们需要在移动到下一个缓冲区之前执行此操作,因此该call命令使用|.
  • -c cmd运行cmd是加载第一个缓冲区后的命令模式命令。
  • Nes 开启不兼容、静默、ex-mode,更适合非交互处理。

好处:

  • setline文本内容可以是任何东西-一个&sed替换文本可以产生意想不到的效果。