我需要将内核参数添加到尚未包含它们的行中。 (如果已经存在,请不要将其添加到所有行。)
我已经构建了这个awk
命令来在缓冲区中执行它,但由于awk缺乏像sed
这样的编辑能力,因此无法将其放入文件本身。 (但我无法弄清楚如何与sed
进行此类匹配。)
awk '/\tkernel/&&!/audit=1/ { print $0" audit=1"; }' /etc/grub.conf
这会查找匹配“kernel”和 NOT “audit = 1”的行(必要时附加“audit = 1”。)
标记为sed / awk,但对其他建议持开放态度。
答案 0 :(得分:3)
使用sed:
sed -i '/kernel/{/audit=1/!s/$/ audit=1/}' /etc/grub.conf
答案 1 :(得分: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