Unix正则表达式:文本文件中没有超过70个字符的行

时间:2015-04-02 01:33:53

标签: regex unix newline

我需要在unix中使用正则表达式来确保文本文档中的任何行都不超过70个字符,而我找不到正确的表达式。我一直在努力:

sed "s/\(^.{70}\)/\1\n\r/g" firstMondayNoParas2.txt > firstMondayLined.txt

这个表达式虽然不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:2)

你还需要逃避花括号。

sed "s/^\(.\{70\}\)/\1\n\r/"

示例:

$ echo 'foobar' | sed 's/^\(.\{3\}\)/\1\n\r/'
foo
bar

$ echo 'foobar' | sed 's/^.\{3\}/&\n\r/'
foo
bar

如果你想减少每70个字符,那么你可以尝试这样,

sed 's/.\{3\}/&\n/g' file

示例:

$ echo 'foobarbuzbu' | sed 's/.\{3\}/&\n/g'
foo
bar
buz
bu

您也可以使用perl

$ echo 'foobarbuz' | perl -pe 's/(.{3})(?!$)/\1\n/g'
foo
bar
buz

(.{3})(?!$)将捕获每个三个字符,但不会捕获最后一个字符。因此,如果输入的字符数为3,则不会在最后添加额外的新行字符。要进行就地编辑,您必须添加-i参数,例如

perl -i -pe 's/(.{70})(?!$)/\1\n/g' file