То, как мое значение по умолчанию регистрировало полномочия, изменяется от 666 (перед umask настройками) к 04 501

Попробуйте это:

sed -r "s/=~(.*)$/match(\1)/" <filename>

Кроме того, ошибка, которую Вы получаете, состоит в том, потому что sed интерпретирует /=\~/ как фильтр для строки, что операция должна быть выполнена, s/=\~/match(/ как операция и s/$/ )/ как флаг для операции, в этом случае необходимо использовать группу и разделить выражения с новой строкой:

sed -re "/=\~/ {
  s/=\~/match(/
  s/$/ )/
}" <filename>

Вот соответствующая документация о блоке команды {} от info sed

`{ COMMANDS }'
 A group of commands may be enclosed between `{' and `}' characters.
 This is particularly useful when you want a group of commands to
 be triggered by a single address (or address-range) match.
3
30.10.2014, 22:14
1 ответ

Для сортировки используется недопустимый ключ (недопустимый, поскольку он не соответствует введенному тексту). В информационном руководстве по сортировке предлагается использовать опцию --debug , чтобы исследовать поведение совпадающих ключей. С помощью командной клавиши 1,2,1 .9n при сортировке выводится следующий результат:

% sort -k 1.2,1.9n --debug input.txt 
sort: using ‘en_US.UTF-8’ sorting rules
1-----***
 ^ no match for key
_________
1---*****
 ^ no match for key
_________
R----****
 ^ no match for key
_________

, который, по-видимому, возвращается к сортировке по умолчанию с использованием всего поля. Если опустить n из ключа и просто использовать 1,2,1,9 , вместо этого получится следующее:

% sort -k 1.2,1.9 --debug input.txt 
sort: using ‘en_US.UTF-8’ sorting rules
1-----***
 ________
_________
R----****
 ________
_________
1---*****
 ________
_________

, которое правильно использует 2-9-й символ первого поля для операции сортировки.

-121--129012-

Попробуйте. И поиграть с ним немного.

echo -n "Press enter to use \"$in\" or enter a new value: "
read userInput
if [[ -n "$userInput" ]]
then
    in=$userInput
fi
echo ... I will use $in.

Проверка ошибок ( test -d и т.д.) зависит от вас....

read является bash builtin, поэтому вы можете получить помощь для него с помощью команды help read (осторожно, потому что вы, вероятно, получите результаты для read и readarray , поэтому будьте внимательны, какой текст справки вы read ing). Прочтение справки покажет вам дополнительные варианты, такие как те, которые @ Costas предлагает использовать:

read -i $in -p "Press enter to use \"$in\" or enter a new value: " in
-121--217625-

Выглядит как очень плохие новости. GNU coreutils touch содержит этот код:

      int default_permissions =
        S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
      fd = fd_reopen (STDIN_FILENO, file,
                      O_WRONLY | O_CREAT | O_NONBLOCK | O_NOCTTY,
                      default_permissions);

, который предполагает, что он всегда создает файлы с точно такими же разрешениями, а default _ permissions всегда имеет значение 0666 (которое выражается символьными константами в исходном коде).

Похоже, что ваша копия touch была подделана. Особенно подозрительно, что используемые сейчас разрешения имеют битовый набор set-user-id.

0
27.01.2020, 21:42

Теги

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