在代码文件中,我想删除代码文本和结束{{1}之间的任何(一个或多个)连续的白线(可能只包含零个或多个空格/制表符然后换行的行)一个块。 <* 1}}这个结论可能在它之前有缩进空格,所以我想保留它们。
这是我尝试做的事情:
}
例如,如果我的代码文件看起来像(□是空格字符):
}
然后我希望它成为:
perl -i -0777 -pe 's/\s+\n([ ]*)\}/\n($1)\}/g' file
然而,它没有做我预期的改变。知道我在这里做错了吗?
答案 0 :(得分:1)
perl -pi -0777 -e's/^\s*\n(?=\s*})//mg' yourfile
(从行的开头删除空行,通过行前面的换行符}作为第一个非空格。)
答案 1 :(得分:1)
我能用正则表达式看到的唯一问题是
所以,你可以试试
s/\s+\n( *)\}/\n$1\}/g
代替。
在测试输入上运行时,这可以正常工作。
为了整理它,您可以尝试以下方法。
s/\s+(\n *\})/$1/g
如果可能有制表符和空格,则可以使用字符类。 (您不需要在字符类中包含“|”)。
s/\s+(\n[ \t]*\})/$1/g
答案 2 :(得分:0)
尝试使用此正则表达式,它使用正向前瞻断言。这样,您只捕获要删除的部分,然后将其替换为空:
s/\s+(?=\n[ ]*\})//g
答案 3 :(得分:-1)
您可以尝试以下一个班轮
perl -0777 -pe 's/\s*\n*(\s*\n)/$1/g' test