En utilisant le code ASCII, vous pouvez remplacer le caractère de tabulation de la même manière sous macOS et Linux.
TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
sed
(BSD sed vs GNU sed)Comme exemple d'utilisation de sed
, j'ai souvent utilisé le script suivant qui sépare les tabulations par des virgules.
# Linux
$ printf "foo\tbar\n"
foo bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo,bar
Cependant, la méthode: point_up: ne fonctionne pas correctement sous macOS.
# macOS
$ printf "foo\tbar\n"
foo bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo bar # <-Inchangé!
Apparemment, cette différence est due au fait que macOS utilise BSD sed
et Linux utilise GNU sed
.
Ce qu'il faut faire avec le remplacement des caractères de tabulation dans BSD sed
a été mentionné dans un article précédent de Qiita:
(Même titre, mais article différent)
Cependant, comme l'utilisation de la méthode ci-dessus est limitée, je voulais avoir un peu plus de polyvalence, mais il y avait l'article suivant.
Dans ce qui précède, LF (saut de ligne) a été exprimé en utilisant le code ASCII comme suit.
LF=$(printf '\\\012_')
LF=${LF%_}
echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
J'ai pensé que cette méthode pouvait être appliquée aux caractères de tabulation telle quelle, et quand je l'ai vérifiée, cela fonctionnait bien.
#La tabulation horizontale (HT) est 011 en code ASCII
TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
Vous pouvez désormais remplacer le caractère de tabulation de la même manière sous macOS et Linux.
# macOS
- OS: Catalina 10.15.6 19G2021 x86_64
- Kernel: 19.6.0
- Shell: zsh 5.7.1
# Linux
- OS: Linux Mint 20 x86_64
- kernel: 5.4.0-47-generic
- shell: bash 5.0.17
Recommended Posts