繁体   English   中英

SED替换为“可能的”换行符

[英]SED replacing with 'possible' newline

我有一个正常工作的sed命令,除非它在某个地方遇到文件中的换行符。 这是我的命令:

sed -i 's,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g'

现在,它工作得很好,但我只是跑过这个文件,它有a像这样a标签:

<a href="link">Click
        here now</a>

当然没找到这个。 所以我需要以某种方式修改它以允许搜索中的换行符。 但我不知道如何让它允许,除非我先关闭整个文件然后删除所有\\n 问题是我放松了文件中的所有格式。

您可以通过在sed脚本中插入一个循环来完成此操作:

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile

原样,这将在输出中留下嵌入的换行符,并且不清楚您是否想要它。 如果没有,只需替换换行符:

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s/\n//g;s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile

也许清理额外的空间:

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s/\n//g;s/\s\{2,\}/ /g;s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile

说明: /<a href/{...}让我们忽略了我们不关心的行。 一旦我们找到了我们喜欢的,我们检查它是否有结束标记。 如果不是( /<\\a>/! ),我们抓住下一行,换行符(N)和分支(b)回到:旁边看看我们是否已找到它。 一旦我们找到它,我们继续进行替换。

这是一个快速而肮脏的解决方案,假设链接中只有一个换行符:

sed -i '' -e '/<a href=.*>/{/<\/a>/!{N;s|\n||;};}' -e 's,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g'

第一个命令( /<a href=.*>/{/<\\/a>/!{N;s|\\n||;};} )检查是否存在<a href=...> </a> ,在这种情况下,它会读取模式空间中的下一行并删除换行符。 第二个是你的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM