Как определить местоположение строк дольше, чем 100 и меньший, чем 150 использований символов sed
и grep
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, будет, распечатывают. Другой способ сделать это использование 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