-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathnewline.txt
134 lines (120 loc) · 7.49 KB
/
newline.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
┏━━━━━━━━━━━━━┓
┃ NEWLINE ┃
┗━━━━━━━━━━━━━┛
FIN DE FICHIER ==> #La fin d'un fichier est une newline pour les fichiers
#texte.
#Pour les autres fichiers, il semble qu'il s'agisse
#souvent de null, mais que cela puisse être n'importe
#quoi.
#Les caracters controles ETX et EOT ne sont pas
#utilisés pour clore un fichier
NEWLINES FIN DE #Une newline peut être considérée :
FICHIER ==> # - comme ce qui sépare deux lignes, auquel cas, il
#n'y a pas de newline à la fin
#d'un fichier texte
# - comme ce qui termine une ligne, auquel cas il y a
#une newline à la fin d'un fichier texte
#Le deuxième cas est largement majoritaire : ainsi un
#fichier texte ne se terminant pas par newline pourrait
#poser problème
#Aussi appelée line break et end-of-line (EOL)
LF OU CR + LF ? ==> #Newline est :
# - LF (x0A) sous Unix
# - CR + LF (x0D + x0A) sous Windows
# - des variantes exotiques sur des OS peu courants
INTEROPERABILITES ==> #Un fichier texte créé sous Windows et non converti et
#lu sous Unix sera lu comme une seule ligne avec les
#newlines convertis en ^M (à moins que l'éditeur soit
#avancé)
#Un fichier texte créé sous Unix et non converti et lu
#sous Windows sera lu comme une seule ligne avec les
#newlines ignorés (à moins que l'éditeur soit avancé).
#Notepad est l'un de ces éditeurs "non-avancés" qui
#produirait l'erreur
\r ET \n ==> #\r sert à représenter CR (x0D)
#Pour \n, c'est plus complexe :
# - En C, C++, Perl, \n signifie LF ou LF + CR en
#fonction de l'environnement
# - En Java, PHP, Python, \n signifie seulement LF
#Sous Vim, LF s'écrit \n en lecture, et \r en écriture
INTERNET ==> #Les web browsers reconnaissent en général les deux
#syntaxes
#Les clients FTP convertissent en général les newlines
#des fichiers texte entre deux systèmes différents
#(mais pas pour les binaires, car x0A et/ou x0D ne sont
#pas de véritables newlines mais du langage machine pur)
#La plupart des protocoles internets (http://, smtp://;
#ftp://, irc://, ...) utilise CR + LF comme newline.
#Mais il est recommandé que LF puisse être lu également
#par les applications utilisant ces protocoles
#comprennent également LF seul, ce qui n'est pas
#toujours le cas
VOIR NEWLINES ==> #Pour lire les newlines, on peut utiliser un éditeur
#hexa, mais aussi :
# - file FILE indique "with CRLF line terminators" si
#les newlines sont CR + LF
# - cat -v FILE
# - od -a FILE
# - hexdump -c FILE
CONVERTIR NEWLINES ==> #Conversion CR + LF -> LF :
# - tr -d '\r'
# - sed 's/\r$//'
#Conversion LF -> CR + LF :
# - sed 's/$/\r/'
# - :set fileformat=dos (sous Vim)
\v (VT) et \f (FF) #\v (VT, soit x0B) et \f (FF, soit x0C) vont à la
#prochaîne ligne, mais reste sur la même colonne. Elles
#ne sont pas considérées comme une newline ni un
#whitespace par les commandes Unix et par Bash, mais
#comme un caractère comme les autres
TRAILING NEWLINE #En console ou dans un script, un backslash en fin de
#ligne échappera la newline le suivant, ce qui aura
#pour effet de la supprimer. Une séquence backslash +
#newline est appelée trailing newline
#Un trailing newline permet donc de continuer la ligne
#de commande sur une nouvelle ligne typographique, ce
#qui peut être préféré pour des raisons typographiques.
#Attention, car à l'intérieur de guillemets simples
#(donc de sed), le backslash sera ignoré mais pas la
#newline, ce qui a pour effet d'annuler la trailing
#newline
#La séquence d'échappement $'\c' désigne un backslash ne
#pouvant pas échapper de newline, et pouvant donc être
#placé en fin de ligne
NULL_NEWLINE ==> #Il est possible avec certaines commandes de remplacer
#les newlines par null. Cela a pour effet que les
#whitespaces sont traités comme des caractères comme les
#autres (comme s'il étaient échappés), ce qui évite de
#provoquer certains de leur comportement gênants comme
#scinder un seul input en deux.
#Cependant, cela necessite que les commandes puissent
#lire les null comme des newlines.
ATTENTION ! ENTOURER #De plus, il faut faire attention, car un null (sous la
LES NULL DE " " ==> #forme $VAR, \0, \x00) non entouré de " " sera supprimé
#de l'output. Ainsi echo -e $'\0' n'imprimera pas le
#null contrairement à echo -e "\0"
#Ne marche pas avec $'\0' ou avec des substitutions
#comme $( ) qui suppriment de facto le null.
#Xargs supprime les nulls également en l'absence de
#l'option -0
COMMANDES UTILES ==> #Pour l'écriture des newlines avec des null, il y a
#par exemple :
# - uniq -z
# - find -print0 et find -fprint0
# - grep -Z
# - sed, avec l'option P, D et N
# - du -0
# - shuf -z
# - locate -0
#Pour leur lecture :
# - grep -z
# - sort -z et sort --files0-from=FILE
# - wc --files0-from=FILE
# - xargs -0
# - du --files0-from=FILE
# - shuf-z
#
#Pour reconvertir les null en newlines :
# - COMMANDES | sed 's/\x00/\n/g'
# - COMMANDES | xargs -0 -i echo {}
# - COMMANDES | tr '\0' "\n"