In Below file.
nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
networks: files
protocols: db files
services: db files sss
ethers: db files
rpc: db files
netgroup: nis sss ldap
sudoers: files sss
i want to add text 'ldap' in last line between 'files' and 'sss' which should give an output file as below
nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
networks: files
protocols: db files
services: db files sss
ethers: db files
rpc: db files
netgroup: nis sss ldap
sudoers: files ldap sss
现在我正在使用 sed 更改行。
sed -i '/sudoers: files sss/c sudoers: files ldap sss' nsswitch.conf
有没有更好的方法可以达到同样的效果?
答案1
awk 解决方案是
awk '$1 ~ /sudoers/ && $0 !~/ldap/ { $2 = $2 " ldap" ;} {print ;} ' nsswitch.conf > nsswith.txt
cp nsswith.txt nsswith.conf
在哪里
$1 ~ /sudoers/ && $0 !~/ldap/
选择以 sudoers 开头的行,不包含 ldap{ $2 = $2 " ldap" ;}
在第三个位置插入 ldap{print ;}
打印该行(修改后的行和其他行)
请注意 :
- 通常
awk
无法进行内联编辑,因此您必须依赖于临时文件。 sudoers:
awk 解决方案可以处理空格问题。(例如,如果和之间有一个或多个空格或制表符file
)