我有一个包含以下行的文件。
xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname.com)(PORT = 80))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = database)
)
)我想找到xyz_write并替换它下面的行,直到发现空行被替换为下面的行。
xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2.com)(PORT = 80))
(CONNECT_DATA =
(FAILOVER = TRUE)
(SERVER = DEDICATED)
(SID = database)
(SERVICE = servicename)
)
)我尝试使用sed命令,将第一组行存储在一个变量中,并将其替换为第二组行。但这并没有帮助。我们如何才能做到这一点?
我尝试了下面的方法:
我将第一组行分配给一个变量,如下所示。
VARIABLE1="xyz_write =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname.com)(PORT = 80))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = database)
)
)" 和
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”。由于换行,这将不起作用。应该有一些方法来实现这一点。
发布于 2014-07-20 14:30:36
文件filename.txt包含以下行
$cat filename.txt
<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“的条目,则警告用户并使用新值更新该条目。因此我想换掉它。不知何故,我通过删除现有条目并在文件末尾添加新条目来实现这一点。
命令来删除现有条目。
\#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将新值追加到文件末尾。
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
https://stackoverflow.com/questions/24829857
复制相似问题