печатать строки, где третий символ является цифрой - PullRequest
0 голосов
/ 07 марта 2020

например, наш bash скрипт называется masodik, и есть text.txt со следующими строками:

qwer
qw2qw
12345
qwert432

Затем я пишу ./masodik text.txt, и я получил

qw2qw
12345

Я пробовал это разными способами, и я не знаю, почему это не работает

#!/bin/bash
for i in read u ; do
    echo $i $u | grep '^[a-zA-Z0-9][a-zA-Z0-9][0-9]'
done

Ответы [ 5 ]

2 голосов
/ 07 марта 2020
$ grep -E '^.{2}[0-9]' text.txt 
qw2qw
12345

, и в скрипте это может быть что-то вроде:

#!/bin/sh
grep -E '^.{2}[0-9]' "$1"
1 голос
/ 07 марта 2020

Вы также можете сделать это с помощью awk довольно легко:

awk '/^..[0-9]/' file

Результат

С вашим вводом в file:

$ awk '/^..[0-9]/' file
qw2qw
12345

(sed тоже работает, sed -n '/^..[0-9]/p' file)

1 голос
/ 07 марта 2020

Для печати строк, третьим символом которых является ди git:

grep ^..[0-9] text.txt

^ соответствует началу строки. Точка . соответствует любому символу. [0-9] соответствует любому ди git.

1 голос
/ 07 марта 2020

Проблема с кодом здесь:

#!/bin/bash
for i in read u ; do
    echo $i $u | grep '^[a-zA-Z0-9][a-zA-Z0-9][0-9]'
done

... в том, что синтаксис for неверен:

  • read u рассматривается как список слов. Таким образом, переменная $u никогда не устанавливается, поэтому $u остается пустым.

  • for l oop будет выполняться дважды - в первый раз $i будет установите в строку «чтение» , во второй раз $i будет установлена ​​строка «u» . Поскольку ни одна строка не содержит числа, grep ничего не возвращает.

  • Код никогда читает text.txt .

См. Саша Хапёрский ответ для действующего рабочего кода.


Если по какой-то странной причине все внешние утилиты, ( grep, awk, et c. ), запрещено, этот чистый код POSIX будет работать:

#!/bin/sh
while read u ; do
    case "$u" in
        [a-zA-Z0-9][a-zA-Z0-9][0-9]*) echo "$u" ;; 
    esac
done
0 голосов
/ 07 марта 2020

Если perl установлено в систему, то сценарий оболочки будет выглядеть как

#!/bin/bash

perl -e 'print if /^.{2}\d/' text.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...