Кроме того, это работает для меня:
xinput --set-prop "NAME_OF_YOUR_MOUSE" "Device Accel Constant Deceleration" 3
Где ИМЯ _ИЗ _ВАШЕЙ _МЫШИ — это имя вашей мыши, которое можно получить, просто набрав
xinput
в терминале.
Вы можете добавить эту команду в «Автозапуск приложения», в настройках «Сеанс и запуск».
awk -v name=Paul '
BEGIN { RS=""; FS=":"; ORS="\n\n"; name = tolower(name) }
tolower($2) == name { print; next }
{ print >(FILENAME ".new") }' current_employee.txt >>former_employee.txt
Это сделало бы несколько вещей, учитывая имя в командной строке (здесьPaul
). Он будет обрабатывать входной файл current_employee.txt
как набор записей, между которыми есть пустая строка (вот что делает RS=""
). Каждая такая запись делится на поля на основе :
, так что (при условии, что строка name
всегда первая,)$1
всегда является меткой name
, а $2
всегда является именем сотрудника.
Затем он устанавливает разделитель выходных записей на двойную новую строку, чтобы убедиться, что в конце каждой записи, которую выводит код, всегда будет пустая строка. Это также нижний -регистр имени запроса, на тот случай, если верхний/нижний регистр строки запроса и данных нельзя полностью доверять правильности(john
уже все в нижнем регистре, например ).
Если имя в нижнем регистре в текущей записи, прочитанной из входного файла, совпадает с нашей строкой запроса в нижнем регистре, то выводится вся запись, и программа переходит к следующей строке ввода, используя next
.
Если имя в текущей записи не то, что мы ищем, запись также выводится, но в файл, имя файла которого совпадает с именем файла входного файла, с добавлением .new
в конец.
Результатом кода awk
является добавление с >>
к файлу former_employee.txt
.
Это означает, что при запуске вы получите нечто подобное:
$ ls
current_employee.txt
$ cat current_employee.txt
name:john
surname:James
salary:3000
department:finance
name:Paul
surname:Perez
salary:5000
department:inventory
name:Abel
surname:Wood
salary:4000
department:inventory
$ awk -v name=Paul '
BEGIN { RS=""; FS=":"; ORS="\n\n"; name = tolower(name) }
tolower($2) == name { print; next }
{ print >(FILENAME ".new") }' current_employee.txt >>former_employee.txt
$ ls
current_employee.txt current_employee.txt.new former_employee.txt
$ cat former_employee.txt
name:Paul
surname:Perez
salary:5000
department:inventory
$ cat current_employee.txt.new
name:john
surname:James
salary:3000
department:finance
name:Abel
surname:Wood
salary:4000
department:inventory
Затем вы можете использовать
mv current_employee.txt.new current_employee.txt
для замены старых записей текущего сотрудника обновленными записями.
Вышеупомянутая слегка громоздкая команда заключена в сценарий оболочки и придана ей немного больше воздуха:
#!/bin/sh
for file in current_employee.txt former_employee.txt
do
if [ -f "$file" ] && cp "$file" "$file-orig"; then
printf 'Backed up %s as %s-orig\n' "$file" "$file"
fi
done
awk -v name="$1" '
BEGIN {
RS = ""
FS = ":"
ORS = "\n\n"
name = tolower(name)
}
tolower($2) == name { print; next }
{ print >(FILENAME ".new") }' current_employee.txt >>former_employee.txt &&
mv current_employee.txt.new current_employee.txt
Этот сценарий создаст резервную копию двух файлов current_employee.txt
и former_employee.txt
, а затем обновит их в соответствии с именем, заданным в качестве первого аргумента сценария.
Обычно вы используете этот скрипт как
$./script Paul
Использование утилиты GNU awk v4.1.0 или более поздней версии с параметром inplace для редактирования файлов в -месте
# set input n output filenames
if=current_employee.txt
of=former_employee.txt
gawk -F: -i inplace -v n="John" '
/^name:/&&tolower($2)==tolower(n),!NF{
print >> OUT;next
}1
' OUT="$of" "$if"
С помощью редактора строк GNU ed:
### set input n output filenames
if=current_employee.txt
of=former_employee.txt
### user defined function to make changes
fx() {
## unpack arguments
n=$1
## escape any regex chars in name
for e in \\ \[ ^ \$. \* /;do
n=${n//"$e"/\\"$e"}
done
## make name case insensitive
set -- {a..z}
for UC in {A..Z}; do
lc=$1; shift
n=${n//[$lc$UC]/"[$lc$UC]"}
done
## define the block which contains the name e.g., john
block="?^name:${n}\$?;/^\$/"
## invoke ed editor to make changes
ed -s "$if" <<eof
# add a dummy line to eof
a
.
# append block to former employee file
${block}W $of
# delete block from current employee file
${block}d
# take away the dummy line added
\$d
# save n quit from the current employee file
wq
eof
}
## and now invoke fx to make the changes in files
fx 'john'
### end
Теперь просмотрите текстовые файлы текущего и бывшего сотрудников, чтобы увидеть изменения.