web-dev-qa-db-fra.com

commande de coupure newline

J'ai un fichier comme ça:

one
two 
three 
four

Je voudrais utiliser une boucle for dans un script bash afin d'analyser la ligne du fichier pour la ligne. Auparavant, j'utilisais cut mais je ne pouvais pas donner à la commande cut le délimiteur de nouvelle ligne, comment puis-je cela?

De cette façon, cela ne fonctionne pas:

cut -d'\n' -f1

Toute suggestion ?

17
pedr0

Utilisez cat pour concaténer ou afficher. Pas besoin de ça ici:

while read line ; do
    echo "$line"
done < file
13
Benoit

Je me suis retrouvé dans le même problème, cela fonctionne pour moi:

cat file.cut | cut -d$'\n' -f1

Ou:

cut -d$'\n' -f1 file.cut
51
Ivan

Utilisez simplement:

echo -n `cut ...`

Cela supprime le\n à la fin

3
Philipp Murry

Donc, de très bonnes réponses (éventuellement meilleures) ont déjà été fournies. Mais en regardant le libellé de la question initiale, en voulant utiliser une boucle BASH, je me suis étonné que personne ne mentionnait une solution avec le changement de Field Separator IFS. C'est une solution pure bash, tout comme la ligne de lecture acceptée

old_IFS=$IFS
IFS='\n'
for field in $(<filename)
do your_thing;
done
IFS=$old_IFS
1
DOK
cat FILE|while read line; do # 'line' is the variable name
   echo "$line" # do something here
done

ou (voir commentaire):

while read line; do # 'line' is the variable name
   echo "$line" # do something here
done < FILE
1
0xC0000022L

Si vous êtes certain que la sortie sera toujours délimitée par des lignes, utilisez head -n 1 au lieu de cut -f1 (notez que vous avez mentionné une boucle for dans un script et que votre question n'était pas liée au script).

Beaucoup d'autres réponses, y compris celle acceptée, comportent plusieurs lignes inutilement. Pas besoin de faire cela sur plusieurs lignes ou de changer le délimiteur par défaut sur le système.

De plus, la solution fournie par Ivan avec -d$'\n' ne fonctionnait pas pour moi, que ce soit sur Mac OSX ou CentOS 7. Étant donné que sa réponse a quatre ans, je suppose que quelque chose a dû changer dans la logique du caractère $ pour cette situation.

0
Phil