Regex sed匹配多行范围并替换
我有下面的文件Regex sed匹配多行范围并替换,regex,sed,Regex,Sed,我有下面的文件 next: { host = "http://nxt-newepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz" }; second: { host = "http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz" }; 我想替换基于nxt:{host=”“和second:{ho
next:
{
host = "http://nxt-newepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"
};
second:
{
host = "http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"
};
我想替换基于nxt:{host=”“
和second:{host=”“
的url。如何使用多行匹配的sed筛选此url,因为它们位于多行上
我试过:
sed -i '/second : {\rhost/s#"http://.*"#"next.com"#' file.txt
它不起作用。我正在为新行使用
\r
,但我也尝试了\n
如果我们可以假设您在下面的第二行有URL第二行:
您可以使用
sed -i '/second:/{N;N;s#"http://.*"#"next.com"#}' file
看这个
N
将换行符和后续行追加到模式空间。因此,对以下文本运行s
substitute命令:
second:
{
host = "http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"
如果不知道它到底是哪一行,您可以在找到以0+空格开头的lione之前循环,然后host=
,然后才运行替换:
sed -i '/second:/{:a;n;/^ *host *=/!ba;s#"http://.*"#"next.com"#}' file
看这个
这里,
/second:///code>-一旦一行包含
second:
-设置名为:a
a
-丢弃当前图案空间,并将下一行读入其中n
-如果行没有(/^*主机*=/!ba
)以0+空格开始,!
,0+空格,主机
,然后返回(=
)标记b
位置a
-运行替换s#“http://.*”#“next.com”#
[[:space:][]*
、[[:blank:][]*
或\s*
以匹配任何空格,具体取决于在sed
中工作的内容这可能适用于您(GNU sed):
新url的替换仅限于second:
部分
遇到另一部分时,重复处理
在second:
部分中,将查找以host=“
开头的行,并替换双引号中的值
否则将重复该过程,直到满足上述任一条件或文件结束。Try
sed-i'/second://{N;N;s#“http://.#“next.com”#'file
。这假设您在下面的第二行有URL第二:
谢谢。将尝试。N和N是什么意思sed命令N
将下一行输入追加到当前匹配的行。N;N
执行两次。;
放在两个命令之间。N
追加新行和然后,在模式空间的下一行上运行s
substitute命令:{host='http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz“text。请告知此结构是否已修复,我们可能会利用此结构。感谢您的帮助。您可以将其作为答案并进行解释。我们是否也可以根据主机关键字进行筛选?
sed -E ':a;/^second:/{:b;n;/^\S+:/ba;/(^\s*host = ")[^"]*/s##\1newUrl#;Tb}' file