Durch die Verwendung von ASCII-Code können Sie das Tabulatorzeichen unter MacOS und Linux auf dieselbe Weise ersetzen.
TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
sed
OS abhängig (BSD sed vs GNU sed)Als Beispiel für die Verwendung von sed
habe ich häufig das folgende Skript verwendet, das Tabulatoren durch Kommas trennt.
# Linux
$ printf "foo\tbar\n"
foo bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo,bar
Die Methode: point_up: funktioniert jedoch unter macOS nicht gut.
# macOS
$ printf "foo\tbar\n"
foo bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo bar # <-Nicht geändert!
Anscheinend ist dieser Unterschied darauf zurückzuführen, dass macOS "BSD sed" und Linux "GNU sed" verwendet.
Was mit dem Ersetzen von Tabulatorzeichen in "BSD sed" zu tun ist, wurde in einem früheren Qiita-Artikel erwähnt: bow:
(Gleicher Titel, aber anderer Artikel)
Da die Verwendung der oben genannten Methode jedoch begrenzt ist, wollte ich etwas mehr Vielseitigkeit, aber es gab den folgenden Artikel.
Oben wurde LF (Zeilenvorschub) unter Verwendung von ASCII-Code wie folgt ausgedrückt.
LF=$(printf '\\\012_')
LF=${LF%_}
echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
Ich dachte, dass diese Methode so wie sie ist auf Tabulatorzeichen angewendet werden könnte, und als ich sie verifizierte, funktionierte sie einwandfrei.
#Die horizontale Registerkarte (HT) ist im ASCII-Code 011
TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
Sie können das Tabulatorzeichen jetzt unter MacOS und Linux auf dieselbe Weise ersetzen.
# 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