我正在尝试使用 grep 从文件(具体来说是 smb.conf)中删除注释,而 bash 给了我一个错误。我发现这个问题如何从文件中删除所有注释?这给出了 grep 执行此操作的语法,但它不会覆盖文件,只是将其打印到终端。我想有效地覆盖该文件。事情是这样的:
$ sudo grep -o '^[^#]*' /etc/samba/smb.conf >> /etc/samba/smb.conf
-bash: /etc/samba/smb.conf: Permission denied
我以前做过类似的事情,但后来我遵循在线指南,我隐约记得必须先启动 bash,然后才能 grep。显然,我再也找不到那个指南了。
如何使用 grep 删除文件中的注释?
我正在开发运行 Raspbian Jessie 的 Raspberry Pi B+。
答案1
sed -i -e 's/#.*$//' -e '/^$/d' inputFile
除了删除所有注释之外,它还删除空行。我知道你用 grep 询问过,但我想我会建议这个。从功能上讲,它是相同的,甚至更好,通过删除空行,压缩文件的大小,我假设这是你的目标。
编辑:是的,替换#
为;
,你应该很好。至少在我的 CentOS 6 机器上它可以工作。如果它抱怨无效字符或其他内容,您可能需要\
在前面放一个 。;
答案2
sed 是一种可以“直接”编辑文件(通过制作文件的临时副本)的选项。此命令将告诉 sed-i
就地编辑 /etc/samba/smb.conf ,并且-n
默认情况下不打印行。
sudo sed -i -n '/^[^#]/ p' /etc/samba/smb.conf
我们告诉它“p”打印的行是与您的 grep 正则表达式匹配的行,我仅对其进行了轻微修改以删除无关的尾随*
。在这里,正则表达式表示“匹配以除奥克托索普”。