Копирование двух слов от строки в две переменные

Вы можете запустить программу с домашнего компьютера по SSH. Приложение все равно будет работать на компьютере дома, но передаваться через Интернет. Это можно сделать через X Переадресацию.

Учебное пособие по переадресации X можно найти в следующих 2 URL;

https://help.ubuntu.com/community/ssh/Openssh/portForwarding

https://www.linode.com/docs / Приложения / Удаленные настольные / работает-графическое программное обеспечение-на-your-linode-с-xforwarding-on-ubuntu-12-04

0
27.12.2014, 00:43
2 ответа

Вы можете выполнить задание SED on-lister:

sed '/(\?\([0-9]\+\))\?$/s//; number=\1/
     t n
     s/$/; number=0/
     :n
     /^.*, [0-9]\?\([WURBG]\)/{
                               s//color=\1/
                               s/[WURBG]\{2,\}/M/
                              }
     /[Ll]and/s/^[^;]*/color=L /
     /color/!s/^[^;]*/color=C /' file

Но я хотел бы предложить команды PUT в Файл сценария :

#!/bin/sed -f
/(\?\([0-9]\+\))\?$/s//; number=\1/
t n
s/$/; number=0/
:n
/^.*, [0-9]\?\([WURBG]\)/{
    s//color=\1/
    s/[WURBG]\{2,\}/M/
}
/[Ll]and/s/^[^;]*/color=L /
/color/!s/^[^;]*/color=C /

Затем выполните

sed -f script.file file

Обратите внимание, что все вышеперечисленные REGEX тестируются только на вашем примере, и если вы встретите неразрушиваемые работы, его можно урегулировать небольшую настройку.

1
28.01.2020, 02:51

В то время как вы можете сделать эту вещь, обернув более примитивные инструменты Unix - GREP , SED , awk и т. Д. - В скрипте оболочки Эта проблема действительно хочет обрабатываться в полном языке программирования, который имеет мощную систему регулярного выражения. Лично я бы достигли Perl:

#!/usr/bin/perl -w
use strict;

my $line = 0;
my ($junk, $color, $number);

open my $data, '<', 'data.txt' or die "open: $!\n";
while (<$data>) {
    chomp;
    ++$line;

    if (m/Land/) {
        print "color=L, number=0\n";
    }
    else {
        ($junk, $color, $number) = m/, (\d+)?([WURBG]+) \((\d+)\)$/;
        if (defined $color and defined $number) {
            $color = 'M' if length($color) > 1;
            print "color=$color, number=$number\n";
        }
        else {
            ($junk, $number) = m/, (\d+)? ?\((\d+)\)$/;
            if (defined $number) {
                print "color=C, number=$number\n";
            }
            else {
                print "Line #$line is malformed!\n";
            }
        }
    }
}

data.txt содержит это:

Sorcery, R (1)
Creature — Beast 5/3, 4G (5)
Sorcery, 1WWU (4)
Legendary Land
Artifact, (0)
Legendary Creature — Eldrazi 15/15, 15 (15)

Есть только одно отличие от того, что вы разместили: линия «Артефакт» в вашем вопросе не имеет скобок вокруг 0 , что потребовало бы исключения, которое будет сделано в парсере. Это может быть добавлено, но я не понимаю, почему это лучше, чем исправить формат файла данных.

Я предполагаю, что вы не просто хотите, чтобы значения цвета и количества напечатаны, так как этот скрипт. Вы поставили свой собственный код для каждого из линий линий .

BIT BIT BIT исходит из моего предположения о том, что цифра до цветной буквы (ы) может быть значительной. Я использую его, чтобы помочь парсеру сделать это. Если у вас есть реальное использование для этой цифры, вы можете переименовать $ Junk переменную, чтобы иметь семантическое значение. Это только «мусор» для меня, потому что я не знаю, что означает значение.


0
28.01.2020, 02:51

Теги

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