Попробуйте это:
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.
Для сортировки используется недопустимый ключ (недопустимый, поскольку он не соответствует введенному тексту). В информационном руководстве по сортировке предлагается использовать опцию --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.