[sed] Utilisez sed pour remplacer les caractères de tabulation sous macOS et Linux

emballer

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"

Dépendant du système d'exploitation 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.

Environnement de vérification

# 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

[sed] Utilisez sed pour remplacer les caractères de tabulation sous macOS et Linux
Utilisez la bibliothèque unicodedata de Python pour afficher les caractères pleine largeur et demi-largeur
Je veux utiliser Linux sur mac
Sur Ubuntu Linux, définissez Tab sur q
Débutants! Commandes et utilisation de base de Linux!
Comment utiliser le contrôleur audio C216 sur Arch Linux
Préparation à l'utilisation d'Ansible sur un serveur Linux existant
Je souhaite utiliser OpenJDK 11 avec Ubuntu Linux 18.04 LTS / 18.10
[Astuces] Comment utiliser l'iPhone comme caméra Web sous Linux
[Pour les débutants] Comment utiliser l'instruction for sous Linux (variables, etc.)
Installez pyenv sur MacBookAir et basculez Python à utiliser
Lorsque vous souhaitez utiliser python 2.x sur Gentoo Linux moderne
Que faire si vous ne pouvez pas utiliser le WiFi sous Linux
Attribuez une adresse locale de lien à Linux et utilisez DNS-SD / SSDP
Utiliser Github Desktop sous Linux
Enregistrement et lecture sous Linux
Utiliser Linux sur Windows 10 (WSL2)
Je souhaite utiliser la traduction de raccourcis comme l'application DeepL même sous Linux
Comment configurer et utiliser OMC Log Analytics - Version Linux-
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment afficher la résolution PDF et des informations détaillées sur Linux (pdfinfo)
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Python 3.6 sous Windows ... et vers Xamarin.
Comment installer et utiliser Tesseract-OCR
Comment utiliser Dataiku sous Windows
Remarques sur l'utilisation de pywinauto
Comment installer Graph-Tool sur macOS
Comment installer VMware-Tools sur Linux
Remarques sur l'utilisation des featuretools
Comment utiliser l'homebrew dans Debian
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
Utiliser les commandes Linux sur les appareils Android
[Langage C] Comment utiliser la fonction crypt sous Linux [Hachage de mot de passe]
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer