Сейчас я использую Cinnamon, который делает это по умолчанию. Просто перетащите окно влево, и оно развернется, чтобы занять половину экрана. Аналогично верху и справа. Разве это не работает для Gnome? Там должна быть настройка, ищите "Привязка к краю" или что-то подобное.
В любом случае, до того, как Cinnamon сделал это, я написал небольшой скрипт, который сделает это за меня:
#!/bin/bash
## If no side has been given, maximize the current window and exit
if [ ! $1 ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
exit
fi
## If a side has been given, continue
side=$1;
## How many screens are there?
screens=`disper -l | grep -c display`
## Get screen dimensions
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'`;
HALF=$(($WIDTH/2));
## If we are running on one screen, snap to edge of screen
if [ $screens == '1' ]
then
## Snap to the left hand side
if [ $side == 'l' ]
then
## wmctrl format: gravity,posx,posy,width,height
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
## Snap to the right hand side
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
fi
## If we are running on two screens, snap to edge of right hand screen
## I use 1600 because I know it is the size of my laptop display
## and that it is not the same as that of my 2nd monitor.
else
LAPTOP=1600; ## Change this as approrpiate for your setup.
let "WIDTH-=LAPTOP";
SCREEN=$LAPTOP;
HALF=$(($WIDTH/2));
if [ $side == 'l' ]
then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$LAPTOP,0,$HALF,-1
else
let "SCREEN += HALF+2";
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$SCREEN,0,$HALF,-1;
fi
fi
Это зависит от disper
, wmctrl
и xdpyinfo
, все из которых доступны в репозиториях Debian.Он должен работать из коробки, если вы используете только один экран, но, возможно, потребуется настроить (измените значение $ LAPTOP
), если у вас 2 экрана.
Затем я назначил два сочетания клавиш, по одному для каждой из этих команд:
Привязать текущее окно к левому краю
snap_windows.sh l
Привязать текущее окно к правому краю
snap_windows.sh r
Затем я мог бы запустить соответствующее сочетание клавиш, чтобы получить желаемый эффект. Это должно сработать, но почти наверняка в Gnome есть настройки для этого.
$ awk '/^Members/ { for (i=2; i<=NF; ++i) { sub(",$", "", $i); print $i } }' file
admin
Admin1
John
sam
dean
Здесь используется awk
для поиска любой строки, начинающейся со строки Members
. Когда такая строка найдена, выполняется итерация по полям, разделенным пробелами -этой строки, начиная со второго поля и далее. В каждом поле удаляется завершающая запятая (, если она существует ), прежде чем оно будет напечатано на отдельной строке.
Перенаправить вывод в новый файл, если вы хотите его сохранить, используя
awk...as above... file >newfile
Использованиеsed
:
$ sed -n '/^Members[[:blank:]]*/{ s///; s/,[[:blank:]]*/,/g; y/,/\n/; p; }' file
admin
Admin1
John
sam
dean
Это находит строки, начинающиеся со строки Members
, а затем удаляет эту строку и все пробелы (, табуляции или пробелы ), следующие за ней.Затем он удаляет пробелы после любой запятой в оставшейся части строки и заменяет запятые на новые строки перед печатью результирующего списка.
С помощью GNU sed
вы можете комбинировать
s/,[[:blank:]]*/,/g; y/,/\n/; p;
в
s/,[[:blank:]]*/\n/gp;
Вы можете просто попробовать следующую комбинацию команд awk и sed
awk '/^Members/{$1=" ";print $0}' filename |sed "s/,/\n/g"| sed -r "s/^\s+//g"
выход
admin
Admin1
John
sam
dean
Пробовал с Python, все работает нормально
#!/usr/bin/python
import re
import subprocess
k=re.compile(r'^Members')
y=open('u.txt','r')
for i in y:
if re.search(k,i):
k=re.sub("Members"," ",i)
print re.sub(",","\n",k).strip()
praveen@praveen:~$
выход
admin
Admin1
John
sam
dean
for member in $(cat /tmp/yourfile.txt | grep Members | cut -d' ' -f2-); do
echo $member | cut -d, -f1
done
Результаты:
admin
Admin1
John
sam
dean
И это работает, если у вас есть более одной строки «Участники» в файле.