sed
空白のパターン マッチに失敗することが多いようです。次の例を検討してください。
echo 'A B C' | sed 's/[ \t]*//g'
ABC
echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A B C
perl -e 'print "A B C\n"' | sed 's/[ \t]*//g'
ABC
perl -e 'print "A\tB\tC\n"' | sed 's/[ \t]*//g'
A B C
sed
空白が一致しないことがある理由を説明していただけますか?
答え1
1.
echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A B C
私には効果があります
$ echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
ABC
これを試して
$ echo -e 'a\tb' | sed -e 's/[ \t]//'
ab
2.
perl -e 'print "A B C\n"' | sed 's/^[ \t]*//g'
A B C
^
文字列の行頭()にスペースが含まれていません
答え2
のいくつかのバージョンでは、置換コマンドの左側にある およびその他のエスケープはsed
サポートされていません。\t
sed
のバージョン間の差異に関する情報は、よくある質問。
答え3
上記の 2 番目のステートメントは私のマシン (Ubuntu 10.10 amd64、sed バージョン 4.2.1、sed パッケージ バージョン 4.2.1-7) では機能しますが、なぜ機能しないのかについては説明できません。
3番目と4番目は行頭アンカー(^)を使用しているため、のみ先頭の空白を削除すると、入力テキストの行の先頭に空白がなくなります。
答え4
使用すべき\s空白とタブの両方に一致させるには:
echo 'A B C' | sed 's/\s//g'
ABC
echo -e 'A\tB\tC' | sed 's/\s//g'
ABC
perl -e 'print "A B C\n"' | sed 's/\s//g'
ABC
perl -e 'print "A\tB\tC\n"' | sed 's/\s//g'
ABC