Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Unix正则表达式:文本文件中的行长度不超过70个字符_Regex_Unix_Newline - Fatal编程技术网

Regex Unix正则表达式:文本文件中的行长度不超过70个字符

Regex Unix正则表达式:文本文件中的行长度不超过70个字符,regex,unix,newline,Regex,Unix,Newline,我需要在unix中使用正则表达式,以确保文本文档中的任何行都不超过70个字符,而且我就是找不到正确的表达式。我一直在努力: sed "s/\(^.{70}\)/\1\n\r/g" firstMondayNoParas2.txt > firstMondayLined.txt 但是这个表达式不起作用。我错过了什么?你还需要摆脱花括号 sed "s/^\(.\{70\}\)/\1\n\r/" 示例: $ echo 'foobar' | sed 's/^\(.\{3\}\)/\1\n\r/'

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

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

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

你还需要摆脱花括号

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
例如:

您还可以使用
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

您的问题是关于regexp,还是关于将文件剪切到70宽度?因为
cut-c1-70
更容易…在替换中去掉
\r
。Unix行以
\n
结尾,而不是
\n\r
。此外,这将仅在前70个字符后添加换行符。如果行数超过140个字符,第二行的长度仍将超过70个。即使在Windows上,行数也以
\r\n
结尾,而不是
\n\r
。这使得行数在70个字符后实际换行,但只换行前70个字符。我有一行大约500个字符,只在前70行加了一行。我假设*或+需要去某个地方。最后一个命令很接近,除非我不想每70个字符换行一次,除非一行超过70个字符,如果这有意义的话。如果您的系统安装了perl,那么您可以使用perl解决方案。@zaferoff两者都是一样的。perl命令似乎可以工作!非常感谢你。我对perl解释器了解不多,所以您能解释一下(?!$)对匹配字符做了什么吗?
perl -i -pe 's/(.{70})(?!$)/\1\n/g' file