<分区>
我遇到了一些旧的 Makefile 脚本,该脚本旨在使用 sed 命令删除空行。代码本身非常简单明了。
sed -i -e '/^[ \t]*$$/ d'
我知道 ^[\t]*$
部分只是表示一行以空格或制表符开头,然后重复零次或多次直到行尾。一直不太明白为什么在正则表达式的末尾多了一个“$”符号。
我也试过只使用单个 $ 符号。似乎可以达到同样的效果。
sed -i -e '/^[ \t]*$/ d'
那么在这种情况下使用双美元符号的目的是什么?
------------------------补充说明--------------------
我没有提到它来自 Makefile,这是我的错。我天真地以为不管在Makefile里面还是外面都是一样的。命令是这样的:
RM_BLANK:组织文件
@cpp 组织文件 | sed -e 's/*//g' > 文件
@sed -i -e '/^[\t]*$$/d' 文件
org_file 是包含大量空白行的文件。
如果 sed
命令直接在 org_file 上执行,它(我的意思是使用 $$
)的行为与在 Makefile 外部使用时 hek2mgl 的回答完全一样。它只删除以 $
结尾的行,并保留没有 $
的空行。但是当在 Makefile 环境中使用时,它只是删除行尾没有 $
的空行。我认为这可能与 Makefile 约定有关。有人可以帮忙解决这个难题吗?