3

我需要将内核参数添加到尚未包含它们的行中。(不想将它添加到所有行,以防它已经存在。)

我已经构建了这个awk命令来在缓冲区中执行它,但是由于 awk 缺乏像sed. (但是我不知道如何用 . 进行这种类型的匹配sed。)

awk '/\tkernel/&&!/audit=1/ { print $0" audit=1"; }' /etc/grub.conf

这会查找匹配“kernel”而不是“audit=1”的行(根据需要附加“audit=1”。)

标记为 sed/awk,但对其他建议持开放态度。

4

2 回答 2

3

使用 sed:

sed -i '/kernel/{/audit=1/!s/$/ audit=1/}' /etc/grub.conf
于 2013-01-03T02:22:28.983 回答
3

的就地编辑功能sed使用没有后缀的临时文件来替换现有文件。例如,这个:

sed -i '/\tkernel/ { /audit=1/!s/$/ audit=1/ }' /etc/grub.conf

与此相同:

sed '/\tkernel/ { /audit=1/!s/$/ audit=1/ }' /etc/grub.conf > tmp && mv tmp /etc/grub.conf

旗帜只是为这个-i过程涂上了糖衣。因此,您可以简单地将相同的逻辑应用于您的awk命令:

awk '/\tkernel/ && !/audit=1/ { print $0, "audit=1"; next }1' /etc/grub.conf > tmp && mv tmp /etc/grub.conf
于 2013-01-03T02:40:18.307 回答