2009-07-27 14 views
20

我正在尋找一個bash或sed腳本(最好是一行),可以在固定數量的字符後插入新的行字符在巨大的文本文件中。如何在文件中的固定數量的字符後面插入新的行字符

+0

Dupe of http://stackoverflow.com/questions/525592/find-and-replace-inside-a-text-file-from-a-bash-command其中很多很多其他 – 2009-07-27 08:36:57

+4

我不同意的複製評論在這裏,尼爾:這不是一個簡單的搜索和替換就像你的鏈接中的問題.. – Kristian 2009-07-27 09:18:42

回答

32

這樣的事情呢?更改20個字符的換行符之前的數量,並temp.text用於替換該文件..

sed -e "s/.\{20\}/&\n/g" < temp.txt 
+2

如果文件中包含'〜'字符失敗 – 2009-07-27 10:05:42

+1

這將在*每20個字符(原始行)後面插入一個換行符。如果原始文件不包含換行符,並且僅在前20個字符後需要換行符,則在結尾處省略「g」(全局)。如果你想要這個,而原始文件包含換行符,你必須使用不同的解決方案。 – 2009-07-27 10:45:55

0
如果你的意思是你想對於一些字符後插入您的新行整個文件

,例如,在整個文件

gawk 'BEGIN{ FS=""; ch=30} 
{ 
    for(i=1;i<=NF;i++){ 
     c+=1 
     if (c==ch){ 
      print "" 
      c=0   
     }else{ 
      printf $i 
     } 
    } 
    print "" 
}' file 

,如果你的意思是每5個字符

gawk 'BEGIN{ FS=""; ch=5} 
{ 
    print substr($0,1,ch) "\n" substr($0,ch) 
}' file 
0

追加的搶先後,在每行的字符如特定號碼中插入30字符後y行後面有一個完整的42個字符的行

sed -ie '/^.\{42\}$/a\ 
' huge_text_file 
2

設N是一個shell變量,表示您希望換行的字符數。如果你想繼續計數翻過線:

perl -0xff -pe 's/(.{'$N'})/$1\n/sg' input 

如果你想重新啓動每行的數量,省略-0xff說法。

0

這可能會爲你工作:

echo aaaaaaaaaaaaaaaaaaaax | sed 's/./&\n/20' 
aaaaaaaaaaaaaaaaaaaa 
x 
26

這裏是POSIX的解決方案:

awk '{gsub(/.{5}/,"&\n")}1' file 

或者:

fold -w5 file 

輸入:

banana strawberry grape 

輸出:

banan 
a str 
awber 
ry gr 
ape 

有趣的是,在awk解決方案比倍更好的性能。

相關問題