将控制台输出附加到文件开头

将控制台输出附加到文件开头

要生成 fake-module-bpy(适用于 blender Python)...但是,语言并不重要。因此,我使用下一个控制台命令

]$ ls  | grep -v _init_ | sed -E 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

它将把所有 python 文件作为导入写入 __init__.py (排除其本身的 __init__.py)

我可以写入/附加文件的开头而不是结尾吗?

答案1

一切都grep可以在以下范围内完成sed:参见本教程。在这种情况下,您添加-e '/PATTERN/d'以重现grep -v选项:

ls | sed -E -e '/_init_/d' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

您可以ls使用以下方法消除:

for f in *; do echo "$f"; done | sed -E -e '/_init_/s' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

这样就无需使用外部程序以及处理ls默认添加的任何额外信息或标志。

有多种以相反顺序添加文件的方法:

  • 如果您使用ls,那么ls -r将以相反的顺序输出文件。
  • 如果使用for f in *; ...,则通过管道传输输出sort -r
  • 随后您可以使用tac它来反转输出中的行顺序。
  • 冗长的方法是将每个文件输出到单行文件,将当前输出列表附加到其中,然后移动它以覆盖正在运行的输出列表。

答案2

这回答了你的第二个问题。

这里有一个在文件开头写入内容的小技巧sed

sed -i '1s/^/to start of file\n/' existing_file.txt

也许经过一些修改它就适合您。

相关内容