Sed(或awk)替换列表中的主机

时间:2013-04-05 15:42:05

标签: bash sed awk

对于令人困惑的标题感到抱歉,我无法说明我在没有示例的情况下尝试做的事情。

我运行了一串命令,产生的输出如下所示:

Host_A
Host_B
Net_X
Group_Y

等等等等

然后我想接受该输出并将其输入到sed中,以便它将使用新字符串(例如Host_Q)替换前一个列表中找到的字符串的任何实例。

sed 's/Host_A/Host_Q/g' 

工作正常,但是我想避免为每个主机手动编写一个sed字符串。

谢谢!

编辑:更好的例子

grep stream产生:

Host_A
Host_B
Host_C
Host_D
+lots more

我想将该grep流传递给sed,并使用新的(尽管相同的)主机名替换所有这些主机的实例。

Editx2:此外,列表是动态的。因此,我针对新文件运行此类型,内容将不同,这就是为什么我不能(并且不想)硬编码原始值。

EDIT :::

我自己想通了,抱歉的家伙。

我是这样的:

awk '{print "sed \x27s\/"$1"/HOST_Q/g\x27"}'

很抱歉这么混乱

2 个答案:

答案 0 :(得分:1)

您是否希望在同一个命令中添加多个替换字符串?

mycommands | sed '
s/Host_A/Host1/g 
s/Host_B/Host2/g 
s/Net_X/Net1/g 
s/Group_Y/Group2/g'

或者创建如下命令文件:

#!/bin/sed -f
s/Host_A/Host1/g 
s/Host_B/Host2/g 
s/Net_X/Net1/g 
s/Group_Y/Group2/g'

将此脚本保存为“chgnames”之类的文件并使其可执行,您可以使用简单的命令:

mycommands | ./chgnames

答案 1 :(得分:1)

sed 's#^\(Host_A\|Host_B\)$#Host_Q#'

这?