-1

抱歉标题令人困惑,如果没有示例,我无法完全表达我正在尝试做的事情。

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

Host_A
Host_B
Net_X
Group_Y

等等等等

然后我想获取该输出并将其提供给 sed,以便它将在上一个列表中找到的字符串的任何实例替换为新字符串,例如 Host_Q。

sed 's/Host_A/Host_Q/g' 

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

谢谢!

编辑:更好的例子

grep 流产生:

Host_A
Host_B
Host_C
Host_D
+lots more

我想将该 grep 流通过管道传输到 sed,并让 sed 用新的(尽管相同的)主机名替换这些主机的所有实例。

Editx2:此外,列表是动态的。因此,我针对新文件运行的每种类型,内容都会有所不同,这就是为什么我不能(也不想)对原始值进行硬编码。

编辑:::

我自己想出来的,对不起各位。

我正在这样处理流:

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

抱歉让我如此混乱

4

2 回答 2

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”之类的文件并使其可执行,您可以使用简单的命令:

我的命令 | ./chgnames

于 2013-04-05T15:53:27.450 回答
1
sed 's#^\(Host_A\|Host_B\)$#Host_Q#'

那?

于 2013-04-05T15:55:59.633 回答