我需要写一个快速的(明天之前完成)过滤器脚本,将双引号字符串中的换行符(LF或CRLF)替换为转义的换行符
我知道sed不适合这个任务,因为它按行工作,所以我转向perl,但我对perl一无所知 :)
我已经编写了这个正则表达式:
所以我的问题是:
\n
。内容是一个(损坏的)JavaScript程序,因此我需要允许在字符串内使用转义序列,例如"ab\"cd"
和"ab\\"cd"ef"
。我知道sed不适合这个任务,因为它按行工作,所以我转向perl,但我对perl一无所知 :)
我已经编写了这个正则表达式:
"(((\\.)|[^"\\\n])*\n?)*"
并使用http://regex.powertoy.org进行了测试。它确实匹配带有换行符的引用字符串,但是perl -p -e 's/"(((\\.)|[^"\\\n])*(\n)?)*"/TEST/g'
却没有替换成功。所以我的问题是:
- 如何使perl匹配换行符?
- 如何编写“替换”部分,以保留原始字符串并仅替换换行符?
有一个类似问题的awk解决方案,但不完全符合我的需求。
注意:我通常不提这样的“请帮我做”的问题,但我真的不想在明天之前学习perl/awk... :)
编辑: 样本数据
"abc\"def" - matches as one string
"abc\\"def"xy" - match "abcd\\" and "xy"
"ab
cd
ef" - is replaced by "ab\ncd\nef"
\"
和\\"
可能意味着您期望字符串被扩展两次,或者您想保留一个刚好位于结束"
之前的反斜杠。由于您没有提供除了 "正确处理" 以外的任何期望输出,我只能猜测 "正确处理" 对您来说意味着什么。 - TLP