空白のsed除去


1

私はそれを見つける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時々空白のマッチングに失敗する理由を説明してもらえますか?


@Peterが言ったように、私のUbuntu 11.10 / sed 4.2.1でも動作します。使用しているシステムは何ですか?sedバージョン?環境変数?
オリブレ

回答:


3

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

文字列には^、行の先頭()にスペースが含まれていません


ありがとうございました。浮遊^アンカーを削除しました。タブ文字を他にどのように一致させることができますか?
user001

ありがとうございました。*乗数(echo -e 'A\tB\tC' | sed 's/[ \t]//g')を削除しても機能しませんでした。
user001

@ user001:echo -e 'A\tB\tC' | perl -pe 's/[ \t]*//g':-)
RedGrittyBrick

ああ、それは素晴らしく機能します。どうもありがとうございます。perlスクリプトが機能するが、awkスクリプトが失敗する理由はありますか?それらは同一に見えます。
user001

@ user001:なぜsedが機能しないのかわかりません。壊れているようです。環境内の何かが何らかの機能を引き起こしているのかもしれません。
RedGrittyBrick

1

の一部のバージョンは、sedサポートしておらず\t、置換コマンドの左側にある他のエスケープもあります。

あなたはのバージョン間のばらつきに関する情報を見つけることができますsedよくある質問を


0

上記の2番目のステートメントは私のマシン(Ubuntu 10.10 amd64、sed ver 4.2.1、sedパッケージバージョン4.2.1-7)で動作しますが、なぜ動作しないのかについては説明がありません。

3番目と4番目は行頭アンカー(^)を使用しているため、先頭の空白のみが削除され、入力テキストでは行の先頭に空白がありません。


BOLアンカーを削除するのを忘れました(^)。削除しても、4番目のステートメントは機能しません。投稿が修正されました。
user001

0

空白とタブの両方に一致させるには、\ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.