如何使用 grep 扫描 .scss 文件的文件夹并删除第一行(如果它是空白的)?

How do I use grep to scan a folder of .scss files and remove the first line if it is blank?

我正在进入 linux 并优化我的工作流程,希望能举个例子。我在嵌套文件夹中有一大堆 .scss,我需要检查第一行是否为空,如果是,则删除它,然后重新保存文件。我在工作windows,但喜欢写作bash。我已经尝试过 :

grep -r "/^\n/"

但似乎return 每一行都是空白。然后我不太确定如何删除它然后重新保存。

您不使用grep编辑文件,您应该使用sed

https://www.gnu.org/software/sed/manual/sed.html

这可能会让您入门:

find . -name '*.scss' -exec sed -i.bak '1{/^$/d}' {} \;

为了理解这个命令,我们可以把它分成两部分:

  1. find . -name '*.scss' -exec ... \;

    从当前目录开始,递归查找名称以 .scss 结尾的文件,当找到一个文件时,它会在其上运行 -exec 后面的命令。

  2. sed -i.bak '1{/^$/d}' {}

    sed 是一个流编辑器。选项 -i.bak 告诉它就地更改文件,留下备份文件。在 find 运行此命令之前,它会将 {} 替换为它找到的文件的实际名称。

    1{...}' 告诉 sed select 文件的第一行并将大括号中的命令应用于它。

    /^$/ 是正则表达式。如果该行为空,则匹配该行。

    d 告诉 sed 删除任何匹配的行。

    所以,让我们把它们放在一起:如果文件的第一行是空的,sed 会删除它。

您会在 findsed 上找到许多网上教程。您可以找到有关使用 man findman sed.

的详细信息