我有以下遵循相同模式的 file.txt,我想通过添加 ip 来修改该文件所在的位置:
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65
/bin/false
我想在包含作为用户用户控制台的行末尾添加一个IP:
USER CONSOLA *,!10.249.247.4,!10.249.245.65,!10.249.245.90,
我目前只能在整个文档中添加IP,但不能在使用的代码的特定行中添加IP
sed 's/\r\?$/,!10.10.11.1/' file.txt
答案1
在行首(^
锚点)进行匹配并在行尾($
锚点)替换新文本:
$ sed '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.10.11.1
/bin/false
如果您的文件具有您希望保留的 Windows/DOS 风格的 CRLF 行结尾,请将上面的内容修改为
sed '/^USER CONSOLA/ s/\r$/,!10.10.11.1\r/' file.txt
如果你不希望保留 DOS 结尾,那么首先使用 删除它们dos2unix
或添加一个附加命令来在 sed 中执行此操作:
sed -e 's/\r$//' -e '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
答案2
使用下面的方法来实现相同的效果
sed "/USER CONSOLA/s/.*/&\,\!10.249.245.90,/g" filename
输出
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.249.245.90,
/bin/false