web-dev-qa-db-fra.com

Comment insérer un nouveau caractère après un nombre fixe de caractères dans un fichier

Je cherche un script bash ou sed (de préférence un one-liner) avec lequel je peux insérer un nouveau caractère après un nombre fixe de caractères dans un fichier texte énorme.

26
rangalo

Que diriez-vous quelque chose comme ça? Change 20 est le nombre de caractères avant la nouvelle ligne et temp.text est le fichier à remplacer dans ..

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

Voici la solution POSIX:

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

Ou:

fold -w5 file

Contribution:

banana strawberry grape

Sortie:

banan
a str
awber
ry gr
ape

Fait intéressant, la solution Awk est plus performante que fold.

34
Steven Penny

Soit N une variable Shell représentant le nombre de caractères après lequel vous souhaitez une nouvelle ligne. Si vous souhaitez continuer le compte sur plusieurs lignes:

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

Si vous souhaitez redémarrer le compte pour chaque ligne, omettez l'argument -0xff.

2
William Pursell

Ajouter une ligne vide après une ligne avec exactement 42 caractères

sed -ie '/^.\{42\}$/a\
' huge_text_file
0
Chen Levy

si vous voulez dire que vous voulez insérer votre nouvelle ligne après un certain nombre de caractères par rapport au fichier entier, par exemple après le 30ème caractère du fichier entier

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

si vous voulez dire insérer un nombre spécifique de caractères dans chaque ligne, par exemple après chaque cinquième caractère

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

Cela pourrait fonctionner pour vous:

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