我想用这个:
perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file
用于在文本文件中的每一行的末尾添加“在行的开头”。问题是有些线条只是空行,我不希望这些行被改变。任何想法如何修改上面的代码或者可能完全不同的做法?
答案 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