首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找到上下文后,用多行替换多行

找到上下文后,用多行替换多行
EN

Stack Overflow用户
提问于 2014-07-19 00:31:38
回答 1查看 48关注 0票数 0

我有一个包含以下行的文件。

代码语言:javascript
复制
xyz_write =
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.com)(PORT = 80))
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SID = database)
  )
)

我想找到xyz_write并替换它下面的行,直到发现空行被替换为下面的行。

代码语言:javascript
复制
xyz_write =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
 (CONNECT_DATA =
   (FAILOVER = TRUE)
   (SERVER = DEDICATED)
   (SID = database)
   (SERVICE = servicename)
  )
)

我尝试使用sed命令,将第一组行存储在一个变量中,并将其替换为第二组行。但这并没有帮助。我们如何才能做到这一点?

我尝试了下面的方法:

我将第一组行分配给一个变量,如下所示。

代码语言:javascript
复制
VARIABLE1="xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname.com)(PORT = 80))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = database)
)
)" 

代码语言:javascript
复制
VARIABLE2="xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
(CONNECT_DATA =
(FAILOVER = TRUE)
(SERVER = DEDICATED)
(SID = database)
(SERVICE = servicename)
)
)". 

然后,我尝试运行命令"cat source_file.txt | sed "s/$VARIABLE1/$VARIABLE2/g“> destination_file.txt”。由于换行,这将不起作用。应该有一些方法来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2014-07-20 14:30:36

文件filename.txt包含以下行

$cat filename.txt

代码语言:javascript
复制
<blank line>
abc_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
(CONNECT_DATA =
(FAILOVER = TRUE)
(SERVER = DEDICATED)
(SID = database)
(SERVICE = servicename)
)
)
<blank line>
xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
(CONNECT_DATA =
(FAILOVER = TRUE)
(SERVER = DEDICATED)
(SID = database)
(SERVICE = servicename)
)
)
<blank line>

我只想要一个上下文条目。对于"xyz_write“,我只需要在文件中输入一个条目。在向文件中添加新条目时,请检查该条目是否已经存在。如果已经存在"xyz_write“的条目,则警告用户并使用新值更新该条目。因此我想换掉它。不知何故,我通过删除现有条目并在文件末尾添加新条目来实现这一点。

命令来删除现有条目。

代码语言:javascript
复制
\#This value is a command line input.
SERVICE_NAME="xyz_write" 

\#This will remove the existing entry. The command will delete the lines till empty line after the context. -i option will write to the same input file.

sed -i "/$SERVICE_NAME/,/^$/d" filename.txt

将新值追加到文件末尾。

代码语言:javascript
复制
NEW_VALUE="bcd_write
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
(CONNECT_DATA =
(FAILOVER = TRUE)
(SERVER = DEDICATED)
(SID = database)
(SERVICE = servicename)
)
)"

echo $NEW_VALUE >>file_name.txt

这样我的目的就实现了。它实际上并没有取代多行代码。它是通过删除现有行并添加新行来实现的。希望这对某些人有帮助。

谢谢,

-Adithya

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24829857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档