$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Скрипт sed
сначала сопоставляет строки, которые содержат не менее двух точек, используя регулярное выражение \..*\.
(, также мог быть написан[.].*[.]
). Для строк, соответствующих этому, выполняется замена, которая удаляет все до первой точки включительно.
Использование awk
, несколько длинное -закручивание по сравнению с указанным выше:
$ awk -F '.' -vOFS='.' 'NF > 2 { n=split($0, a); $0=""; for (i=2;i<=n;++i) $(NF+1)=a[i] } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Здесь, когда существует более двух полей, разделенных точками -, мы разбиваем текущую строку на точки, а затем повторно -создаем текущую запись из нее, пропуская первое поле. Замыкание 1
в конце приводит к печати каждой строки (, измененной или не измененной ).
Сокращение awk
аналогично решению sed
:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Использование xdotool:
$ xdotool getwindowfocus getwindowgeometry --shell
WINDOW=94371847
X=604
Y=229
WIDTH=1303
HEIGHT=774
SCREEN=0
Если у вас есть координаты верхнего левого угла и размер окна, можно легко вывести запрашиваемые вами координаты:
Таким образом, вы можете объединить это в небольшую функцию, которая даст вам 4 координаты.:
showCoords(){
eval "$(xdotool getwindowfocus getwindowgeometry --shell)"
topLeft="$X,$Y"
topRight="$((X+WIDTH)),$Y"
bottomLeft="$X,$((Y+HEIGHT))"
bottomRight="$((X+WIDTH)),$((Y+HEIGHT))"
printf 'top left:%s\ntop right:%s\nbottom left:%s\nbottom right:%s\n' "$topLeft" "$topRight" "$bottomLeft" "$bottomRight"
}
Если вы сейчас запустите showCoords
, вы получите:
$ showCoords
top left:604,229
top right:1907,229
bottom left:604,1003
bottom right:1907,1003