удаление пробелов sed

Я считаю, что sed часто не удается сопоставить пробелы с шаблоном. Рассмотрим следующие примеры:

echo 'A     B     C' | sed 's/[ t]*//g'
ABC

echo -e 'AtBtC' | sed 's/[ t]*//g'
A       B       C

perl -e 'print "A     B     Cn"' | sed 's/[ t]*//g'
ABC

perl -e 'print "AtBtCn"' | sed 's/[ t]*//g'
A       B       C

не мог бы кто-нибудь объяснить, почему sed иногда не соответствует пробелам?

11
задан user001
20.12.2022 6:20 Количество просмотров материала 2412
Распечатать страницу

4 ответа

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

ваша строка не содержит пробелов в начале (^) строки

3
отвечен RedGrittyBrick 2022-12-21 14:08

некоторые версии sed не поддерживают \t и некоторые другие побеги в левой части команды подстановки.

вы можете найти информацию о различиях между версиями sed на часто задаваемые вопросы.

1
отвечен Dennis Williamson 2022-12-21 16:25

второе утверждение, которое вы выше, работает на моей машине (Ubuntu 10.10 amd64, sed ver 4.2.1, sed package version 4.2.1-7), и у меня нет объяснения, почему это не сработает.

третий и четвертый, потому что вы используете начало строки якорь ( ^ ), так что было бы только удалите начальные пробелы, и в вашем входном тексте у вас нет пробелов в начале строк.

0
отвечен Peter 2022-12-21 18:42

вы должны использовать \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
0
отвечен scriptmonster 2022-12-21 20:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх