Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Unix 如何将周期性换行插入到一个有一行非常长的文件中_Unix_Text Processing - Fatal编程技术网

Unix 如何将周期性换行插入到一个有一行非常长的文件中

Unix 如何将周期性换行插入到一个有一行非常长的文件中,unix,text-processing,Unix,Text Processing,我有一个文本文件,只有一行,但2G字符 我需要在文件中查找一些内容,但行太长,无法在任何编辑器中打开-无论是在Unix上,还是如果我将其ftp到PC上 是否有一种快速/简单的方法插入换行符,例如每120个字符插入一行 sed 's/\(.\{120\}\)/\1\n/g' file.txt 如果需要创建新文件,则只需重定向输出: sed 's/\(.\{120\}\)/\1\n/g' file.txt > new_file.txt 下面是一个示例,每行显示4个字符 [fotanus@t

我有一个文本文件,只有一行,但2G字符

我需要在文件中查找一些内容,但行太长,无法在任何编辑器中打开-无论是在Unix上,还是如果我将其ftp到PC上

是否有一种快速/简单的方法插入换行符,例如每120个字符插入一行

sed 's/\(.\{120\}\)/\1\n/g' file.txt
如果需要创建新文件,则只需重定向输出:

sed 's/\(.\{120\}\)/\1\n/g' file.txt > new_file.txt
下面是一个示例,每行显示4个字符

[fotanus@thing ~]$ cat test.txt 
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
[fotanus@thing ~]$ sed 's/\(.\{4\}\)/\1\n/g' test.txt > a.txt
[fotanus@thing ~]$ cat a.txt 
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
如果需要创建新文件,则只需重定向输出:

sed 's/\(.\{120\}\)/\1\n/g' file.txt > new_file.txt
下面是一个示例,每行显示4个字符

[fotanus@thing ~]$ cat test.txt 
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
[fotanus@thing ~]$ sed 's/\(.\{4\}\)/\1\n/g' test.txt > a.txt
[fotanus@thing ~]$ cat a.txt 
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
qqqq
你可以试试这句话:

 sed -r 's/.{120}/&\n/g' file
如果要将更改写回原始文件:

sed -ir 's/.{120}/&\n/g' file
例如:

文件有100个
s
,每12个字符添加一个换行符:

kent$  cat file                   
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss


kent$  sed -r 's/.{12}/&\n/g' file
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssss
你可以试试这句话:

 sed -r 's/.{120}/&\n/g' file
如果要将更改写回原始文件:

sed -ir 's/.{120}/&\n/g' file
例如:

文件有100个
s
,每12个字符添加一个换行符:

kent$  cat file                   
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss


kent$  sed -r 's/.{12}/&\n/g' file
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssssssssssss
ssss

Fold
命令就是这样做的,所以如果您想在120后换行

fold -w120 fie > newfile

Fold
命令就是这样做的,所以如果您想在120后换行

fold -w120 fie > newfile

如果您不介意创建另一个文件。在
linux
上用
bash
测试了这一点。这里blah.out是输入文件

while read -r -d '' -n 120 record; do echo $record; done<blah.out > blah2.out
读取时-r-d'-n120记录;不要重复记录;说完了

如果您不介意创建另一个文件。在
linux
上用
bash
测试了这一点。这里blah.out是输入文件

while read -r -d '' -n 120 record; do echo $record; done<blah.out > blah2.out
读取时-r-d'-n120记录;不要重复记录;说完了


使用哪种程序语言?这与编程有关吗?您是否尝试过使用
less
。根据我的经验,它在处理大文件方面做得很好。@Colin-less将为我在屏幕上显示它,并将行包装十亿次。但是,如果我将less的输出管道化到一个文件中,结果文件仍然只有一行。这是一个很接近的结果,但我认为文本处理可能与主题有关(尽管这是一个更好的选择)。我的意思是,有多少非程序员需要做这类事情……顺便说一句,unix.SE上有一个副本:使用哪种程序语言?这与编程有关吗?您是否尝试过使用
less
。根据我的经验,它在处理大文件方面做得很好。@Colin-less将为我在屏幕上显示它,并将行包装十亿次。但是,如果我将less的输出管道化到一个文件中,结果文件仍然只有一行。这是一个很接近的结果,但我认为文本处理可能与主题有关(尽管这是一个更好的选择)。我的意思是,有多少非程序员需要做这种事情…顺便说一句,unix上有一个副本。SE:它正在运行。。。祈祷吧。请接受@vidit的回答,我相信这是最好的方式。它不起作用。new_file.txt也是一个巨大的line@Marjeta有意思,也许重定向不起作用?在终端输出中工作。无论如何,
fold
是这个工作的正确工具,而不是
sed
为什么不重定向工作?是的,折叠工作-谢谢你告诉我正确的答案。它正在运行。。。祈祷吧。请接受@vidit的回答,我相信这是最好的方式。它不起作用。new_file.txt也是一个巨大的line@Marjeta有意思,也许重定向不起作用?在终端输出中工作。无论如何,
fold
是这个工作的正确工具,而不是
sed
为什么不重定向工作?是的,折叠工作-谢谢你告诉我正确的答案。事实上,我不想覆盖原始文件。啊!sed:非法选项--r用法:sed[-n]脚本[文件…]sed[-n][-e脚本]。。。[-f脚本文件]。。。[文件…]实际上,我不想覆盖原始文件。啊!sed:非法选项--r用法:sed[-n]脚本[文件…]sed[-n][-e脚本]。。。[-f脚本文件]。。。[文件…]这个有效。谢谢这个有效。谢谢