Строки фильтра на основе длины с помощью sed и grep

Как определить местоположение строк дольше, чем 100 и меньший, чем 150 использований символов sed и grep

4
задан 18 July 2015 в 22:03

2 ответа

Используя команду

sed -nr '/^.{101,149}$/p' infile

Разрушение:

  • -n: никакая печать

-n опция предотвратит для печати чего-либо, если явный запрос для печати не будет найден (^.{101,149}$ "Строки дольше, чем 100 (> =101) и меньший, чем 150 символов (<=149)"). /p флаг, используемый в качестве одного способа снова включить печать.

  • -r:-r (-regexp-расширенный)

-r включает Расширенные регулярные выражения. замена -r с -E если Ваш sed не распознает его, или необходимо будет выйти из фигурных скобок если ни один из них поддерживаемый в версии sed. Затем команда была бы sed -n '/^.\{101,149\}$/p' infile.

  • ^ просто привязка для начала строки и $ для конца строки.

  • Сингл . соответствия любой отдельный символ

Так, Вы получили его, с sed -nr '/^.{101,149}$/p' infile, мы ищем строку от запуска до конца его, который имеет или содержит наше определенное правило.

Это - способ копировать функцию grep с sed например: sed -n '/.../p' :)

Используя команду

grep -E '^.{101,149}$' infile
  • -E это совпадает с sed's -r опция, но для grep команда. Таким образом, если Вы не хотите использовать, просто Escape фигурные скобки.

Используя команду

awk 'length($0)>100 && length($0)<150' infile
  • length возвратите длину строки. В awk, $0 указывает целую строку. Таким образом, если длина строки была между 100 и 150, будет, распечатывают.
9
ответ дан 1 December 2019 в 08:59

Другой способ сделать это использование bash:

while read l; do nc=$(<<< "$l" wc -c); [ $nc -ge 101 ] && [ $nc -le 149 ] && echo "$l"; done < file

Расширенный в сценарий:

#!/bin/bash
while read l; do
    nc=$(<<< "$l" wc -c)
    if [ $nc -ge 101 ]; then
        if [ $nc -le 149 ]; then
            echo "$l"
        fi
    fi
done < file
1
ответ дан 1 December 2019 в 08:59

Другие вопросы по тегам:

Похожие вопросы: