Рейтинг:1

Как захватить только домены 2-го уровня из списка поддоменов

флаг ma

Что мне нужно

У меня есть список таких доменов:

a.example.com
b.foo.com
a.b.bar.com

Я хочу, чтобы на выходе были только домены второго уровня и ничего больше, то есть не 3-й уровень или выше. Это то, что я ищу из моего списка примеров выше:

пример.com
foo.com
bar.com

Что я пробовал

я пытался использовать сед, аук, и резать следующее:

сед

домены кота.txt | sed 's/\.$//g'
домены кота.txt | sed -r 's/^(.*)_/\1\/; s/.$//g' # по какой-то причине удаляется последний символ

аук

awk '{ sub(/\.$/, ""); напечатать $NF }' domains.txt
домены кота.txt | авк -Ф\. '{напечатать $1,$2}' | тр '' '.' # не будет работать, так как есть домены 4-го уровня

резать

домены кота.txt | вырезать -д '.' -f[поле] # не сработает, так как есть домены 4-го уровня
bac0n avatar
флаг cn
`rev domains.txt | вырезать -д. -f-2 | обр.
Justin Washek avatar
флаг ma
Это было раздражающе легко... Большое спасибо за комментарий, это сработало!
bac0n avatar
флаг cn
вы также можете использовать grep: `grep -Po '[^.]+\.[^.]+$' domains`
bac0n avatar
флаг cn
`в то время как IFS=. читать -а а; сделать эхо ${a[@]:(-2):2}; сделано
Justin Washek avatar
флаг ma
Потрясающе, большое спасибо! Я всегда вниз, чтобы узнать разные способы делать вещи. Вы были очень полезны!
Will avatar
флаг id
@ bac0n - ?Отправьте их в качестве ответа - это явно было полезно!
флаг cn
Ответ grep также должен работать с `-E`, в этом нет ничего специфичного для pcre.
bac0n avatar
флаг cn
@glennjackman Не уверен, что это только я, но `-E` в некоторых случаях почти в 3 раза медленнее, чем `-P`, особенно перенаправление.
Рейтинг:4
флаг cn

В случаях, когда вам нужно начать матч справа, вы можете использовать конечную привязку. $ зафиксировать узор до конца строчки.

грэп:

grep -Po '[^.]+\.[^.]+$' domains.txt

сед:

sed 's/.*\.\([^.]\+\.[^.]\+\)$/\1/' domains.txt

аук имеет предопределенную переменную с именем НФ содержит количество полей для текущей записи. Вы можете комбинировать НФ переменная со спецификатором поля $ чтобы вместо этого ссылаться на значение.

авк:

авк-Ф. -vOFS=. '{print $(NF-1), $NF}' domains.txt

Вы также можете инвертировать текст для таких команд, как: читать или же резать что чисто читается слева направо.

обр., вырез:

rev domain.txt | вырезать -д. -f1,2 | оборот

Только пример Bash:

при чтении -r; делать \
    printf %s\n ${ОТВЕТ/#${ОТВЕТ].*.*}.}; \
сделано < domains.txt

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.