我想使用 awk 或 sed 或两者(如果需要)替换 smb.conf 文件某个部分中的一行。以下是文件中的部分...
[CMI] oplocks = no wide links = no writeable = yes delete readonly = yes path = /LOCALSITE/CMI comment = CMI Data write list = @cbishare valid users = @cbishare create mode = 775 directory mode = 775
我希望以后能用这个代码重用,并使用变量在 smb.conf 文件的不同部分上运行。因此,仅在每个部分中查找“写入列表”是行不通的。
我可以使用此代码解析该文件并获取该部分...
awk '/\[\CMI\>\]/,/^$/' /etc/samba/smb.conf
或者使用 sed...
sed -n '/\[\CMI\>\]/,/^$/{p}' /etc/samba/smb.conf
我现在需要在文件中替换该范围内的特定行,例如“写入列表”。我是 sed 或 awk 的新手,我还没有找到有关如何完成最后一部分的任何信息。
我想也许我可以得到该行的 NR,然后使用 sed 重写它。
如果您能提供关于如何执行此操作的任何想法或解决方案的链接,我们将不胜感激。
答案1
和sed
要替换 CMI 部分中“写入列表”的值(仅替换 CMI 部分):
sed '/\[\CMI\>\]/,/^$/ s/\s*write list =.*/ write list = New Value/' smb.conf
write list
这将用 替换的旧值New Value
。它假定 中的部分smb.conf
以空行结尾,正如您的代码中所假设的那样。
和awk
相似地:
awk '/\[\CMI\>\]/,/^$/ {if ($1=="write" && $2=="list") {$0=" write list = New Value"}} 1' smb.conf