Распечатать вторую строку в текстовом файле

У меня есть файл, который возвращает следующий текст:

10.10.10.160:1111
10.10.10.170:2222
10.10.10.180:3333
grep -m 1 -o '.*' filename | cut -d ':' -f

Я попробовал описанное выше и могу получить только 1 сингл строка вывода.

10.10.10.160

Однако, когда я попробовал с

grep -m 2 -o '.*' filename | cut -d ':' -f
10.10.10.160
10.10.10.170

, я получил вышеуказанное.

Если я хочу получить только вторую строку

10.10.10.170

Есть ли способ сделать это?

7
задан 27 October 2020 в 04:43

5 ответов

grep -m 2 -o '.*' filename | cut -d ':' -f 1 | tail -n 1

Результаты:

10.10.10.170

tail -n 1 печатает только последнюю строку результатов grep -m 2 -o '. *' Filename | cut -d ':' -f 1

Исходный текстовый файл называется filename.

8
ответ дан 4 January 2021 в 08:18

Вы можете сделать это только с помощью оболочки (при условии bash), без использования каких-либо других утилит:

{
    read
    IFS=: read ip port
    echo $ip
} < input.txt

Начиная с конца, < перенаправляет input.txt в группу команд {} . Первое чтение затем считывает 1 строку и отбрасывает ее. Второе чтение читает следующую строку, а IFS разделяет ее двоеточием : . Второе чтение заполняет переменные ip и порт 1-м и 2-м элементами второй строки. Переменная $ ip является выводом echo .

0
ответ дан 4 January 2021 в 08:18

Вы можете использовать эту команду sed :

sed -e '2!d' -e 's/:.*//' filename

или, более компактно:

sed '{2!d; s/:.*//; q;}' filename
  • 2! D сообщает sed , чтобы удалить ( d ) все строки, кроме (! ) второй ( 2 ) строки.
  • 's /:.*//' сообщает sed удалить все после : (включая : ).
  • Во втором случае q используется для прекратить операцию сразу после ее завершения (полезно для больших файлов - спасибо @JoL за предложение).
8
ответ дан 4 January 2021 в 08:18

Я бы предложил awk для такого рода задач:

awk -F: 'NR==2 {print $1}' filename

В качестве альтернативы sed:

sed -n '2s/:.*//p' filename

Если размер файла большой , вы можете изменить его на

awk -F: 'NR==2 {print $1; exit}' filename

и

sed -n '2{s/:.*//p;q;}' filename

соответственно, чтобы избежать ненужной обработки последующих строк.

17
ответ дан 4 January 2021 в 08:18
head -2 filename | tail -1 | cut -d ':' -f 1   
25
ответ дан 4 January 2021 в 08:18

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

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