sed 空白の削除

sed 空白の削除

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

関連情報