#regex #sed
#регулярное выражение #sed
Вопрос:
Когда я grep
использую ^[0-9{7}]*
, он обнаруживает все нужные мне строки. Но когда я запускаю это, оно просто удаляет все.
Я не могу найти ссылку для правильного экранирования команды sed. Я знаю, что это тоже момент RTFM : (
sed '/^[0-9{7}]*/d' simple.txt
4216333 2018-06-11T17:27:16-0500 446421648264 140843
4153130 2018-06-11T17:27:15-0500 446421650974 142398
4154997 2018-06-11T17:27:15-0500 446421650985 142399
4155087 2018-06-11T17:27:15-0500 446421650996 142400
4155543 2018-06-11T17:27:15-0500 446421651000 142401
4155615 2018-06-11T17:27:15-0500 446421651010 142402
4155650 2018-06-11T17:27:15-0500 446421651021 142403
4155681 2018-06-11T17:27:14-0500 446421651032 142404
Ответ №1:
^[0-9{7}]*
Шаблон соответствует строке, которая начинается с 0 или более цифр, {
или }
символов. Таким образом, оно соответствует любой строке.
Чтобы удалить строки, начинающиеся с 7 цифр, вы можете использовать следующую команду sed на основе POSIX BRE:
sed '/^[0-9]{7}/d' simple.txt
Или с шаблоном POSIX ERE (где {x}
квантификатор не требует экранирования):
sed -E '/^[0-9]{7}/d' simple.txt
Обратите внимание, что в случае, если вы хотите опустить все строки, где первый фрагмент без пробелов не равен 7 цифрам, его удобнее использовать awk
:
awk '$1 !~ /^[0-9]{7}$/' simple.txt
С sed
(BRE POSIX, без -E
опции) это будет выглядеть как /^[0-9]{7}[[:blank:]]/d
, /^[0-9]{7}[[:space:]]/d
, /^[0-9]{7}>/d
/^[0-9]{7}b/d
.
Комментарии:
1. Я думаю, мой вопрос следует изменить. Мне любопытно, где вы нашли всю эту информацию? Есть ли ресурсы, чтобы узнать, какую команду в
sed
следует экранировать? Спасибо вам за это.2. @CGSmith105 Извините, что следует изменить? Судя по текущему вопросу, вы неправильно понимаете, как кодировать последовательности шаблонов. Помещение всего в квадратные скобки может привести к ошибке шаблона или будет просто соответствовать одному символу, принадлежащему набору.
3. Ничего не должно быть изменено. Как вы узнали, какие символы нужно экранировать?
4. @CGSmith105 Вот хорошая статья о разнице между BRE и ERE.