61 votes

Newlines dans sed sur Mac OS X

Je trouve que \n ne fonctionne pas dans sed sous Mac OS X. Plus précisément, disons que je veux séparer les mots séparés par un seul espace en lignes :

# input
foo bar

J'utilise,

echo "foo bar" | sed 's/ /\n/'

Mais le résultat est stupide, le \n ne s'échappe pas !

foonbar

Après avoir consulté Google, j'ai trouvé un solution de contournement :

echo 'foo bar' | sed -e 's/ /\'$'\n/g'

Après avoir lu l'article, je n'arrive toujours pas à comprendre ce que \'$'\n/g' moyens. Quelqu'un peut-il me l'expliquer, ou s'il existe une autre façon de procéder ? Merci !

2voto

Massimo Zerbini Points 121

Cette solution de contournement fonctionne sur Mac et le script peut être exécuté également sur Linux.

NL="\n"
if [[ $uname -eq "Darwin" ]]; then
    NL=$'\\\n'
fi

echo 'foo bar' | sed -e "s| |${NL}|"

0voto

Batur Points 11

Une forme un peu plus compacte de La réponse de @max-zerbini :

[[ $(uname) -eq "Darwin" ]] && NL=$'\\\n' || NL="\n"
echo 'foo bar' | sed -e "s| |${NL}|"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X