Почему это положительное регулярное выражение 'string.*?(?= )' не работает в sed?

Если вы используете Ubuntu, как указано в одном из ваших тегов, у вас будет каталог с именем

/etc/profile.d

Как и root, создайте внутри файл. Назовем это

dotnet_optout.sh

Откройте его в текстовом редакторе и введите следующее:

#!/bin/sh

DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_CLI_TELEMETRY_OPTOUT

Uodate :Вам не нужно делать файл исполняемым. Это просто сила привычки с первых дней моего знакомства с Linux. Хотя ничего не повредит, если вы это сделаете.

После этого вы можете выйти и снова войти или:

bash

И это запустит новую сессию оболочки, источники которой/etc/profile.d/dotnet_optout.sh

Чтобы подтвердить, когда вы закончите, введите:

echo $DOTNET_CLI_TELEMETRY_OPTOUT

Вы получите результат 1.

Короче говоря, любой сценарий, исполняемый всеми, кто используетbash(или какую-либоsh-подобную оболочку с источниками /etc/profile), которую вы поместили в этот каталог, повлияет на среду каждого.

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

2
04.02.2020, 08:21
1 ответ

Утверждения Positive(?=)и Negative lookahead(?!)хорошо работают только в инструменте, поддерживающем расширения PCRE . Ни GNU sed, ни POSIX не поддерживают эти расширения библиотек. Вам нужен perl, который поддерживает его из коробки

perl -pe 's/bbbb11.*?(?= )//'

Или вы вполне можете добиться того же без поддержки регулярных выражений. Для таких тривиальных замен вы можете сделать что-то, как показано ниже, что работает как в POSIX, так и в GNUsed

sed 's/\(bbbb11[^ ]*\)//'
6
28.04.2021, 23:24

Теги

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