BSD sed vs GNU - способна ли она на вложенные совпадения?

В дополнение к приведенным выше решениям, вы всегда можете использовать трубы со смолой:

pbzip2 -dc FILE.tar.bz2 | tar -tvfW -
-121--38572-

Я считаю, что проблема заключается в том, что вы используете как test , так и [[

test "$(read -p 'Install gtodo? ' R ; echo $R)" = "Y" && (sudo apt-get install gtodo) || (echo "gtodo not installed")
-121--199129-

либо пишете test < expression > , либо В вашем случае я бы даже заменил читать перед тестом , чтобы сохранить выражение коротким:

read -p 'Install gtodo? ' R; test "$R"  == "Y" && (sudo apt-get install gtodo) || (echo "gtodo not installed")

Но оно примет только «Y» в качестве положительного ответа. Если вы измените его на:

read -p 'Install gtodo? ' R; [ "$R"  == "Y" ] || [ "$R" == "y" ] && (sudo apt-get install gtodo) || (echo "gtodo not installed")

Он примет и «Y» и «y» как положительный ответ.

4
17.05.2018, 11:15
2 ответа

Esto parece funcionar en BSDsed:

$ echo -e "foo bar\nfoo\nbar" | sed -n '/foo/{/bar/p;}'
foo bar

Al igual que dos capas de anidamiento:

$ echo -e "foo bar\nfoo\nbar" | sed -n '/foo/{/bar/{p;};}'
foo bar
2
27.01.2020, 20:50

Un comando de edición seddebe terminar con ;o una nueva línea literal. GNU sedes muy indulgente con esto.

Su guión:

/foo/{/bar/{;p;}}

Ampliado:

/foo/{
    /bar/{
        p
    }
}

Esto funcionaría como un script sedalimentado a seda -f.

Si nos aseguramos de reemplazar las nuevas líneas con;(solo necesario al final de los comandos y {...}grupos de comandos )para que podamos usarlo en la línea de comando, obtenemos

/foo/{/bar/{p;};}

Esto funciona con OpenBSDsed(el original no, debido a que falta ese segundo ;).

En este caso particular, esto puede simplificarse aún más a

/foo/{/bar/p;}
5
27.01.2020, 20:50

Теги

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