Получить определённые слова из определённой строки из текстового файла в NetBSD

Сейчас я использую 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 экрана.

Затем я назначил два сочетания клавиш, по одному для каждой из этих команд:

  1. Привязать текущее окно к левому краю

     snap_windows.sh l 
     
  2. Привязать текущее окно к правому краю

      snap_windows.sh r 
     

Затем я мог бы запустить соответствующее сочетание клавиш, чтобы получить желаемый эффект. Это должно сработать, но почти наверняка в Gnome есть настройки для этого.

1
12.03.2019, 11:55
4 ответа
$ 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;
3
27.01.2020, 23:14

Вы можете просто попробовать следующую комбинацию команд awk и sed

awk '/^Members/{$1=" ";print $0}' filename |sed "s/,/\n/g"| sed -r "s/^\s+//g"

выход

admin
Admin1
John
sam
dean
1
27.01.2020, 23:14

Пробовал с 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
1
27.01.2020, 23:14
 for member in $(cat /tmp/yourfile.txt | grep Members | cut -d' ' -f2-); do 
          echo $member | cut -d, -f1  
 done

Результаты:

admin
Admin1
John
sam
dean

И это работает, если у вас есть более одной строки «Участники» в файле.

1
27.01.2020, 23:14

Теги

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