我有一个文件,在xml标签之间有一个长单行字符串,我想用sed替换标签之间的内容。
1300_character_long_string_here
我遇到的问题是,尽管我知道我的正则表达式选择正确,但sed并没有取代。即使我能够正确选择和替换,我也不知道如何从文件中取出替换字符串(大致相当长)并放置它。
这是我目前在该命令中更成功的尝试之一:
sed 's/\<Tag\>(.*)\<\/Tag\>/REPLACE/g' test.txt> out.txt
虽然这不起作用,但如果我尝试仅替换第一个标记,我可以看到它正在替换。
我应该在开始时提到这是一个AIX系统,而不是GNU系统。
答案 0 :(得分:1)
您可以使用r
命令从文件中插入替换文本:
sed '
/<Tag>.*<\/Tag>/{
r newcontentfile
d
}
' file
并且不要忘记用于word boundaries的代码中的<
和>
。它可以解释为什么你的模式不匹配。
答案 1 :(得分:0)
我建议这样的事情:
File1 包含替换文字,例如
some other string
File2 包含标记的行:
...
<tag>some string</tag>
...
现在,您可以说:
sed '1{h;d}; /<tag>/{x;s/^/<tag>/;s/$/<\/tag>/}' File1 File2
如何工作:首先,读取替换文件,将其单行放在保留空间中,然后将其从输出流中删除。接下来,如果一行与<tag>
匹配,则从保留空间中检索替换文本,然后添加标记。