【问题标题】:sed+text on a specific line after an IPsed+text 在 IP 之后的特定行上
【发布时间】:2010-10-25 19:41:45
【问题描述】:

我的 proftpd 日志中有以下行(准确地说是第 78 行)

Deny from 1.2.3.4

我还有一个脚本,它会为使用暴力攻击的人滚动我的日志,然后存储他们的 IP(准备列入黑名单)。我正在努力的是在该特定行的末尾插入(假设为 sed) - 这就是我到目前为止所得到的:

sed "77i3.4.5.6" /opt/etc/proftpd.conf >> /opt/etc/proftpd.conf

现在人们会认为这会完美地工作,但它实际上做了以下事情(第 77 到 78 行):

3.4.5.6
Deny from 1.2.3.4

我怀疑这是由于我的 sed 版本过时造成的,还有其他方法可以实现相同的目标吗? >> 也导致配置在 fole 末尾重复(我再次确定这是我的 sed 版本的限制)。这是在我的 nas 上运行自制的 linux 内核。 sed 选项如下:

root@NAS:~# sed BusyBox v1.7.0 (2009-04-29 19:12:57 JST) 多路通话 二进制

用法:sed [-efinr] 模式[文件...]

选项: -e script 将脚本添加到要执行的命令中 -f scriptfile 将脚本文件内容添加到 要执行的命令 -i 就地编辑文件 -n 禁止自动打印图案空间 -r 使用扩展正则表达式语法

如果没有给出 -e 或 -f,则第一个 非选项参数被视为 sed 脚本来解释。全部剩余 参数是输入文件的名称;如果 没有指定输入文件,则 标准输入被读取。源文件 除非 -i 选项不会被修改 已给出。

为你们的帮助干杯。

【问题讨论】:

    标签: sed line


    【解决方案1】:

    这与sed的版本无关;这只是简单的老做错了。

    sed -i '77s/$/,3.4.5.6/' /opt/etc/proftpd.conf
    

    【讨论】:

    • 你这个该死的聪明笨蛋,谢谢。你介意解释一下吗?是否只是在第 77 行进行搜索,然后将 '$' (假设这没有任何意义)替换为带反引号的 IP 地址?
    • $ 是字符串/行的结尾。所以这基本上只是将地址附加到第 77 行的末尾。另外,s 是替代品,而不是搜索。
    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多