LINUX.ORG.RU

Сообщения ameame2021

 

Межпроцессное взаимодействие в Linux

Доброго времени суток!

Подскажите, пожалуйста, каким образом на любом скриптовом языке в Linux проще всего реализовать следующее (не используя REST API)?

Допустим есть скрипт script1, которые работает в фоне и слушает обращения к нему, в этом скрипте есть функции, например:

function one() {
  printf 1  
}

function two() {
  printf 2
}

Есть скрипт script2, в котором должен выполняться запрос к скрипту script1, для вызова определённой функции из него, например, если выполняем:

./script2

Выполняется функция two() в скрипте script1, возвращается ответ от него, после чего script2 завершается, а script1 продолжает слушать запросы.

Спасибо!

 , , ,

ameame2021
()

Автодополнение в Bash

Доброго времени суток!

Настраиваю автодополнение аргументов командной строки в Bash и столкнулся с такой проблемой, что для некоторых аргументов нужно принимать любые значения (без списка), т.е., когда вводишь такой аргумент, то по нажатию <TAB> должен вводиться пробел:

Пример:

$ script -m account/login -l aaa<TAB>
$ script -m account/login -l aaa<теперь_здесь_пробел>

Т.е. для «aaa» не нужно искать подходящие варианты автодополнения, а просто подставить пробел по нажатию <TAB>.

Подскажите, пожалуйста, можно ли это реализовать? И каким образом?

 ,

ameame2021
()

Не удается подключиться с использованием SSH-ключа

Доброго времени суток!

Не удаётся подключиться к серверу на Ubuntu 19.10, используя SSH-ключ, лог подключения:

ssh 'user2@192.168.2.4' -vvv
...
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: user1@host RSA SHA256:j93L8tDfD46Sjl4b9KKcH6pMbdPEpSGVwI55/jToTW0 agent
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: user1@host ED25519 SHA256:z0y9igtjXtHDH9xTWlCHPnP8mWAA2HgMC8hDVxM/5Jg agent
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user1/.ssh/id_dsa
debug3: no such identity: /home/user1/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/user1/.ssh/id_ecdsa
debug3: no such identity: /home/user1/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/user1/.ssh/id_ecdsa_sk
debug3: no such identity: /home/user1/.ssh/id_ecdsa_sk: No such file or directory
debug1: Trying private key: /home/user1/.ssh/id_ed25519_sk
debug3: no such identity: /home/user1/.ssh/id_ed25519_sk: No such file or directory
debug1: Trying private key: /home/user1/.ssh/id_xmss
debug3: no such identity: /home/user1/.ssh/id_xmss: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
user2@192.168.2.4's password:

Что сделано на клиенте:

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user2@192.168.2.4
$ ssh-add ~/.ssh/id_rsa
$ ssh-keygen -t ssh-ed25519 -b 2048 -f ~/.ssh/id_ed25519
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user2@192.168.2.4
$ ssh-add ~/.ssh/id_ed25519

Что отображается в логах на сервере в /var/log/auth.log:

Jan 18 15:34:18 server kernel: [   10.189545] systemd-logind[321]: Configuration file /etc/systemd/logind.conf is muser2ed executable. Please remove executable permission bits. Proceeding anyway.
Jan 18 15:34:18 server kernel: [   10.189719] systemd-logind[321]: Configuration file /etc/systemd/logind.conf is muser2ed world-writable. Please remove world writability permission bits. Proceeding anyway.
Jan 18 15:34:18 server kernel: [   10.198550] systemd-logind[321]: New seat seat0.
Jan 18 15:34:18 server kernel: [  227.215758] systemd-logind[321]: New session c1 of user user2.
Jan 18 15:34:18 server kernel: [  355.438257] systemd-logind[321]: Session c1 logged out. Waiting for processes to exit.
Jan 18 15:34:18 server kernel: [  355.445270] systemd-logind[321]: Removed session c1.
Jan 18 15:34:18 server kernel: [  372.078823] systemd-logind[321]: New session c2 of user user2.
Jan 18 15:34:18 server kernel: [  622.830058] systemd-logind[321]: Session c2 logged out. Waiting for processes to exit.
Jan 18 15:34:18 server kernel: [  622.836920] systemd-logind[321]: Removed session c2.
Jan 18 15:34:18 server kernel: [  937.360051] systemd-logind[321]: New session c3 of user user2.
Jan 18 15:34:18 server kernel: [ 1015.144938] systemd-logind[321]: Session c3 logged out. Waiting for processes to exit.
Jan 18 15:34:18 server kernel: [ 1015.155507] systemd-logind[321]: Removed session c3.
Jan 18 15:34:18 server kernel: [ 1023.231066] systemd-logind[321]: New session c4 of user user2.
Jan 18 15:34:44 server kernel: [ 1517.236174] systemd-logind[321]: Session c4 logged out. Waiting for processes to exit.
Jan 18 15:34:44 server kernel: [ 1517.242989] systemd-logind[321]: Removed session c4.
Jan 18 15:34:54 server kernel: [ 1527.564143] systemd-logind[321]: New session c5 of user user2.
Jan 18 15:50:28 server kernel: [ 2461.936174] systemd-logind[321]: New session c6 of user user2.
Jan 18 15:50:29 server kernel: [ 2462.100875] systemd-logind[321]: Session c6 logged out. Waiting for processes to exit.
Jan 18 15:50:29 server kernel: [ 2462.106304] systemd-logind[321]: Removed session c6.
Jan 18 16:01:23 server kernel: [ 3116.928845] systemd-logind[321]: New session c7 of user user2.

Вывод /etc/ssh/sshd_config на сервере:

#	$OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile	/home/user2/.ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

 , ,

ameame2021
()

Обработка нажатий клавиш геймпада в tty

Есть устройство на Linux с EmulationStation на борту (клавиатура к нему подключается через USB). Хочу обрабатывать нажатия клавиш геймпада в терминале, чтобы не приходилось подключать клавитуру для этого.

Тестовый скрипт для определения кодов клавиш геймпада:

#!/bin/bash

echo 'Press button "L1":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L1":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "L2":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L2":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Up":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Up":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Down":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Down":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Left":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Left":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Right":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Right":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Select":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Select":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "L3":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L3":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Start":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Start":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "X":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "X":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "Y":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Y":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "B":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "B":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "A":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "A":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "R3":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R3":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "R2":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R2":' >> keycode.txt
echo "$key" >> keycode.txt

echo 'Press button "R1":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R1":' >> keycode.txt
echo "$key" >> keycode.txt

При подключении по SSH или при выходе из EmulationStation и запуске tty скрипт отрабатывает корректно. Т.е. при нажатии клавиши геймпада, определяется код клавиши, она записывается в файл успешно, а процесс:

jstest --event /dev/input/js0

Успешно завершается.

Проблемы начинаются, если скрипт запускать напрямую из EmulationStation, видимо jstest --event /dev/input/js0 зацикливается и pipe начинает работать некорректно.

Процесс выполнения скрипта из EmulationStation:

Press button "L1":

На нажатия клавиш геймпада не реагирует при запуске этого скрипта или реагирует, но мы этого не видим.

При этом в ps aux:

user        635  0.0  0.0   2048   508 ?        S    03:58   0:00 sh -c sudo chmod 666 /dev/tty1; /opt/system/Scripts/Keycode.sh > /dev/tty1; printf "\033c" >> /dev/tty1
user        645  0.0  0.3   6464  2916 ?        S    03:58   0:00 /bin/bash /opt/system/Scripts/Keycode.sh
user        646  0.0  0.1   6464  1572 ?        S    03:58   0:00 /bin/bash /opt/system/Scripts/Keycode.sh
user        647  0.0  0.0   1924   464 ?        S    03:58   0:00 jstest --event /dev/input/js0
user        651  0.0  0.2   8416  2728 pts/0    R+   03:59   0:00 ps aux

Либо нажатия клавиш не перехватываются, либо что-то не так с кодом, shell-ом или subshellom.

Но другой скрипт, при запуске из EmulationStation отрабатывает корректно:

#!/bin/bash

jstest --event /dev/input/js0

Все нажатия клавиш при запуске второго скрипта успешно обрабатываются.

Как я понимаю, проблема именно с grep -m 1 и завершением цикла jstest --event /dev/input/js0. Как её решить непонятно. В чем может быть проблема?

 ,

ameame2021
()

Не отображаются эмодзи в терминале, в Manjaro

Доброго времени суток!

Не отображаются некоторые эмодзи в терминале, в Manjaro. Установил Starship Promt, часть эмодзи, которые в нём используются не отображаются в терминале

Пример такого эмодзи:

echo "🍣 "|hexdump
0000000 9ff0 a38d 0a20                         
0000006

printf %s 🍣 | uconv -x any-name
\N{SUSHI}

perl -CA -le 'print ord shift' 🍣
127843

Часть конфига, в котором присутствуют эмодзи, которые не отображаются:

~/.config 
❯ sed -n 25,52p -n starship.toml 
[git_branch]
format = "[$symbol$branch]($style) "
symbol = "🍣 "
style = "bold yellow"

[git_commit]
commit_hash_length = 8
style = "bold white"

[git_state]
format = '[\($state( $progress_current of $progress_total)\)]($style) '

[git_status]
conflicted = "⚔️ "
ahead = "🏎️ 💨 ×${count}"
behind = "🐢 ×${count}"
diverged = "🔱 🏎️ 💨 ×${ahead_count} 🐢 ×${behind_count}"
untracked = "🛤️  ×${count}"
stashed = "📦 "
modified = "📝 ×${count}"
staged = "🗃️  ×${count}"
renamed = "📛 ×${count}"
deleted = "🗑️  ×${count}"
style = "bright-white"
format = "$all_status$ahead_behind"

При установке необходимо установить шрифт Powerline. Устанавливал его так:

mkdir -p ~/.local/share/fonts
cd ~/Загрузки && wget 'https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/FiraCode.zip'
unzip FiraCode.zip -d ~/.local/share/fonts
cd ~
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
sudo cp -r /home/ameame/.local/share/fonts/* /usr/share/fonts

В настройках терминала выбран шрифт - Fira Code Nerd Font Mono Bold.

Терминал - XFCE, в других терминалах эмодзи тоже не отображаются.

Подскажите, пожалуйста, куда копать?

 , , , ,

ameame2021
()

Perl. Выравнивание строк UTF8 и запись их в файл с помощью sprintf.

Доброго времени суток!

У меня есть скрипт на Perl, который должен выравнивать строки и записывать их в файл, в UTF8. Для этого использую sprintf.

Часть скрипта представлена ниже:

#!/usr/bin/perl
use strict;
use utf8;
use locale;
use warnings;
...
my $length_sv = 9;
open my $out, '>>:encoding(UTF-8)', "filename" or warn "Could not open file - $!" and exit(1);
my ($tid, $cid, $v3, $l, $v5, $sub) = $_ =~ /^\{"id":(\d+),"customer_id":(\d+)(.*?)_login":"(\w{1,10})"(.*?)"subject":"(.*?)"/;
my $subc = substr($sub, 0, $length_sv);
say $subc;
my $string = sprintf "| %-5s | %-1s | %-9s | %-${length_sv}s | %-11s | %-10s|","$time","$num","$tid","$subc","$cid","$l";
say $string;
say $out $string;
close $out;

После запуска скрипта в STDOUT получаю правильный вывод, такой, как должен записаться в файл:

Тест Mark
| 11:00 | 1 | 1234567   | Тест Mark | 10101012      | login   |

Но в файл запись происходит с ошибкой (в столбце с кириллицей):

$ cat filename
| 11:00 | 1 | 1234567   | ТеÑÑ Mark | 10101012      | login   |

В файл должен записаться столбец Тест Mark, но этого не происходит, при этом та же самая строка в STDOUT с помощью say или printf выводится корректно.

Я пробовал добавлять:

binmode($out,':utf8');

К сожалению, это не помогло. Я не совсем понимаю, из-за чего это происходит, ведь при записи в $out указывается явно кодировка UTF-8.

Подскажите, пожалуйста, можно как-то исправить это?

 ,

ameame2021
()

Perl. Некорректная работа скрипта.

Доброго времени суток!

Задача: Есть функция anagram, которой на вход подается ссылка на массив из слов. Функция должна возвратить хэш, ключами которого являются первые встретившиеся слова из множества анаграмм, значениями должны являться ссылки на массив, каждый элемент которого слово из множества, в том порядке в котором оно встретилось в словаре в первый раз. Одинаковые слова из множества должны быть удалены, все слова должны быть приведены к одному регистру.

Пример входных данных:

Торс
Стоп
кукла
рост
КуЛак
кулак
ПОст
сорт

Пример выходных данных:

торс,стоп,кукла,рост,кулак,кулак,пост,сорт
торс,стоп,кукла,рост,кулак,пост,сорт
кукла: кукла кулак
стоп: стоп пост
торс: торс рост сорт

Сам скрипт:

#!/usr/bin/perl

use strict;
use utf8;
use locale;
no warnings;
use 5.10.0;

my @list = qw(Торс Стоп кукла рост КуЛак кулак ПОст сорт);

sub anagram {
    my $arrayref = shift;
    my $index = 0;
    my @array;
    my @uniq;
    my @match;
    my %hash;
    my %uniq = ();
    for (my $i = 0; $i < $#$arrayref; $i++ ) {
	    push @array, lc(@$arrayref[$i]);
    }
    say join ",", @array;
    @uniq = grep { !$uniq{$_}++ } @array;
    say join ",", @uniq;
    while (@uniq) {
	    my @chars = split(//, @uniq[0]);
        my @indexes;
	    my $regex = "[";
	    for (my $i = 0; $i < scalar @chars; $i++) {
	        $regex = $regex . $chars[$i];
	    }
	    $regex = $regex . "]{" . scalar @chars . "}";
        for (my $i = 0; $i < scalar @uniq; $i++) {
            if ($uniq[$i] =~ m/$regex/) {
               push @indexes, $i;
               $match[$index][$i] = $uniq[$i];
            }
        }
        $hash{$uniq[0]} = $match[$index];
        my $last_index = $#indexes;
        for (my $i = $last_index; $i >= 0; $i--) {
            splice @uniq, $indexes[$i], 1;
        }
        @indexes = ();
        $index++;
    }
    return \%hash;
}

anagram(\@list);
my $result = anagram(\@list);
say "$_: @{$result->{$_}}" for sort keys %$result;

При его запуске получаю такой вывод:

торс,стоп,кукла,рост,кулак,кулак,пост
торс,стоп,кукла,рост,кулак,пост
торс,стоп,кукла,рост,кулак,кулак,пост
торс,стоп,кукла,рост,кулак,пост
кукла: кукла кулак
стоп: стоп   пост
торс: торс   рост

Что некорректно.

Подскажите, пожалуйста.

  1. В строках 22 и 24 по одному раз выводим массивы:
22	    say join ",", @array;
24	    say join ",", @uniq;

Но в выводе получаем:

торс,стоп,кукла,рост,кулак,кулак,пост
торс,стоп,кукла,рост,кулак,пост
торс,стоп,кукла,рост,кулак,кулак,пост
торс,стоп,кукла,рост,кулак,пост

Вместо:

торс,стоп,кукла,рост,кулак,кулак,пост
торс,стоп,кукла,рост,кулак,пост

Почему массивы выводятся не по одному разу?

  1. В выводе получаем слова, которые разделены не одним пробелом, а случайным числом пробелов:
кукла: кукла кулак
стоп: стоп   пост
торс: торс   рост

Почему слова разделяются не одним пробелом? Как это можно исправить?

  1. В выводе пропадает слово сорт. Почему?

Спасибо за любую помощь!

 , ,

ameame2021
()

Функция grep в Perl

Доброго времени суток!

Подскажите, пожалуйста.

Есть скрипт:

#!/usr/bin/perl

use warnings;
use strict;
use v5.10;

my @list_with_duplicates = qw( 1 2 3 4 5 5 5 5 5 5 5 5 10 10 11 12 );
my %uniq = ();
my @unique_elements = grep { !$uniq{$_}++ } @list_with_duplicates;
say 'say join ",", %uniq;';
say join ",", %uniq;
say 'say join ",", keys %uniq;';
say join ",", keys %uniq;
say 'say join ",", @unique_elements;';
say join ",", @unique_elements;

Он выводит значения, которые не являются дубликатами из списка.

По какому принципу здесь отрабатывает фильтр { !$uniq{$_}++ }?

В описании функции grep написано, что функция grep оценивает значение BLOCK или EXPR на предмет совпадения с каждым элементом списка LIST (устанавливая локально значение $_ поочередно равным каждому элементу) и возвращает список значений, составленный из этих элементов, которые удовлетворяют критерию совпадения.

Если я правильно понимаю, то в фильтре, сначала проверяется, есть ли в хэше %uniq ключ $_, если нет, то он записывается в хэш, далее переходим к следующему элементу $_ по списку. Если запись успешна, то он добавляется в @unique_elements. Так как ключ-значение в хэше - это уникальная пара элементов, мы не можем записать ключ в хэш, который и так там уже присутствует.

Не совсем понимаю, для чего используется !, чтобы отсеять дубликаты? При каком условии срабатывает переход к следующему элементу ++ или переход срабатывает для всего списка, независимо от того, выполнилось условие или нет? Откуда берутся значения values в хэше %uniq? Просто они не совпадают с входным списком.

Спасибо за внимание!

 ,

ameame2021
()

Вычитание чисел в строках, используя awk, perl или другой однострочник

Доброго времени суток!

Подскажите, пожалуйста, каким способом можно решить следующую задачу с помощью однострочника?

Задача в том, чтобы вычитать значение из первого столбца предыдущей стройки из первого столбца текущей строки и помещать его перед текущей строкой.

Есть файл, вида:

$ cat blabla 
13:06:27.578195 blablabla
13:06:27.578243 bla bla
13:06:27.578271 bla
13:06:27.578337 zzz
13:06:27.578372 zzz zzz zzz
13:06:27.578372 zzz zzz zzz
13:07:02.224100 aaa bbb ccc

Необходимо, используя любую команду(ы) в одну строку получить вывод вида:

0 13:06:27.578195 blablabla
0.000048 13:06:27.578243 bla bla
0.000028 13:06:27.578271 bla
0.000066 13:06:27.578337 zzz
0.000035 13:06:27.578372 zzz zzz zzz
34,645728 13:07:02.224100 aaa bbb ccc

Кажется, что это можно сделать с помощью awk, но у меня не получилось.

Спасибо за любую помощь!!

 ,

ameame2021
()

sed и квадратные скобки

Доброго времени суток!

Подскажите, пожалуйста, как сделать замену, чтобы осталось только слово test без выделения цветом?

Пример:

echo -e "\e[1;33mtest\e[0m"

Пробовал разные простые варианты:

$ echo -e "\e[1;33mtest\e[0m"|sed "s#\e[1;33m##g"
sed: -e expression #1, char 13: unterminated `s' command
$ echo -e "\e[1;33mtest\e[0m"|sed "s#[[(\e1;33m)]##g"
tst0
$ echo -e "\e[1;33mtest\e[0m"|sed -E "s#.*33m##g"|sed -E "s#[\e\[0m##g"
sed: -e expression #1, char 12: unterminated `s' command

Не выходит.

Куда копать?

 ,

ameame2021
()

Сравнение двух списков и вывод в терминал несопадений (без использования vimdiff)

Подскажите, пожалуйста, как вывести несовпадения из двух файлов (списков) без использования vimdiff?

Пример:

Есть два файла:

$ cat file1
00000
11111
22222
33333

$ cat file2
00000
aaaaa
bbbbb
ccccc

Вывести совпадающие строки можно так:

$ grep -Fof file1 file2
00000

Как вывести несовпадения?

Спасибо!

 

ameame2021
()

RSS подписка на новые темы