你好,我已经做了很多研究,但从未找到适合我需要的解决方案。
我必须替换原始的xml行:
# EXTRACT NEEDED SUB LISTS
info_list <- lapply(lst2, `[[`, "information")
filings_list <- lapply(lst2, `[[`, "filings")
proc_merge <- function(i, f, n) {
if(nrow(f) == 0) {
# FILL EMPTY COLUMNS WITH NA
i[colnames(filings_list[[1]])] <- NA
df <- cbind(ID=n, i)
} else {
df <- cbind(ID=n, i, f)
}
return(df)
}
# BUILD DF LIST
df_list <- Map(proc_merge, info_list, filings_list, names(info_list))
# ROW BIND ALL ELEMENTS AND RESET ROWNAMES
final_df <- do.call(rbind, df_list)
row.names(final_df) <- NULL
包含经过修改的xml行:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>
我尝试制作2个变量。这是我的脚本:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>
但是我得到了一些重复的东西:
#!/bin/bash
MOD=`more /aplicaciones/users/t682213/alvaro/mod`
XML=`more /aplicaciones/users/t682213/alvaro/xml`
sed "s#$XML#$MOD#g" test2
请帮助我,我想用另一个非常复杂的字符串替换一个非常复杂的字符串。
答案 0 :(得分:1)
丹D.是正确的。使用正则表达式操纵XML是一种邪恶的方法,在某些情况下可以奏效,但很快就会成为维护的噩梦。不过,如果你真的相信,因为某些原因(如没有XML解析器availabel)你刚才的的的到用sed该任务,我可以回答你的问题(引用另一个SO问题)。
您需要转义文件中的字符串。在这种情况下,麻烦来自替换字符串中的字符&
,这意味着将整个匹配项放在此处。见Escape a string for a sed replace pattern关于如何逃脱的搜索和替换模式的建议。
答案 1 :(得分:0)
我找到了解决方案
正如Michael提到的,问题出在&,所以我在两个文本变量(MOD和XML)中转义了&
这是我的结果,(如果您发现sed中的正则表达式有问题,例如/,“”,&,尝试此操作)
首先,我为要替换(xml)的xml字符串创建两个文本,另一个为要替换为(mod)的xml字符串创建文本。
这是两个文本:
xml (带有&逸出: \&)
<access-log pattern="%h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" %T " prefix="access_${jboss.server.name}" suffix=".log"/>
mod(带有&逸出: \&)
<access-log pattern="%h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>
我创建了一个测试txt来模拟我想在其中工作的完整xml,称为 test2
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>
HOLA
ADIOS
最后创建一个用sed进行更改的shell脚本:(非常重要,要使用#代替/,用“”代替'')
#!/bin/bash
MOD=`more /aplicaciones/users/t682213/alvaro/mod`
XML=`more /aplicaciones/users/t682213/alvaro/xml`
sed "s#$XML#$MOD#" test2 >> test3
最后,脚本会生成正确修改的test3文本:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>
HOLA
ADIOS