linux - 使用 sed 或 awk 替换匹配后的行

标签 linux bash shell awk sed

我正在尝试创建一个小脚本,它基本上使用 dig +short 来查找网站的 IP,然后将其通过管道传输到 sed/awk/grep 来替换一行。当前文件如下所示:

#Server
123.455.1.456
246.523.56.235

所以,基本上,我想在文本文件中搜索“#Server”行,然后将其下面的两行替换为从 dig 获取的 IP 地址。

我理解 sed 的一些语法,但我真的很难弄清楚如何替换匹配项下的两行。非常感谢任何帮助。

最佳答案

根据 OP,并不是 100% 清楚需要在哪里替换什么,但这里有一个针对一般情况的简单说明,使用 GNU sedbash。将“3”后面的两行替换为标准输入:

echo Hoot Gibson | sed -e '/3/{r /dev/stdin' -e ';p;N;N;d;}' <(seq 7)

输出:

1
2
3
Hoot Gibson
6
7

注意:sedr 命令的记录是不透明的(无论如何在 Linux 中)。有关r的更多信息,请参阅:
5.9。'r' 命令未将文件插入到文本中”在此 sed FAQ 中.

关于linux - 使用 sed 或 awk 替换匹配后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473994/

相关文章:

bash - 如何使 bash 输入菜单对话框开始时自动单击重命名?

python - 如何检查显示= :0 exist from python?

bash - 在 Bash 中命名常量的约定是什么?

shell - Solarized 主题选择文本颜色与 iterm2 中的背景太相似

linux - 如何使用 nc 作为扩展回显服务器?

sql-server - 如何从 Linux 桌面分析 SQL-Server?

linux - 检查用户名是否出现在 who 的输出中

linux - 在用户选择的文件中查找单词的 Shell 脚本

c++ - 如何使用 Linux glibc 获取 LWP?

linux - 从 perl 脚本打印的 bash 终端中的回车\r 导致卡住