如何在Perl中每个非空行的开头和结尾添加字符?

时间:2009-11-21 01:50:32

标签: regex perl

我想用这个:

perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file

用于在文本文件中的每一行的末尾添加“在行的开头”。问题是有些线条只是空行,我不希望这些行被改变。任何想法如何修改上面的代码或者可能完全不同的做法?

6 个答案:

答案 0 :(得分:9)

其他人已经回答了正则表达式语法问题,让我们来看看那种风格。

s/^(.*)$/\"$1\",/g

这个正则表达式患有“倾斜牙签综合症”,///让你的大脑出血。

s{^ (.+) $}{ "$1", }x;

使用平衡分隔符,/ x修饰符可以消除不必要的后退,使得正则表达式更容易阅读。此外,/ g是不必要的,因为这个正则表达式每行只会匹配一次。

答案 1 :(得分:7)

perl -pi -e 's/^(.+)$/\"$1\",/g' /your/file

。*匹配0个或更多字符; 。+匹配1个或更多。

您可能还希望将.+替换为.*\S.*,以确保仅引用包含非空白字符的行。

答案 2 :(得分:4)

将。*更改为。+

换句话说,行必须包含1个或多个字符。 。*表示零个或多个字符。

答案 3 :(得分:4)

你应该能够用*(1或更多)替换+(0或更多),如下所示:

perl -pi -e 's/^(.+)$/\"$1\",/g' /path/to/your/file

答案 4 :(得分:4)

你正在做的是在线的正面和背面添加一些东西,所以不需要正则表达式。只需打印出来。如果你的文件很大,那么这个任务的正则表达式很昂贵。

gawk的

$ awk 'NF{print "\042" $0 "\042,"}' file

或Perl

$ perl -ne 'chomp;print "\042$_\042,\n" if ($_ ne "") ' file

答案 5 :(得分:3)

sed -r 's/(.+)/"\1"/' /path/to/your/file