
Tishka17
08.07.2018
12:50:53
Везде? Я не сталкивался
Даже гит ругается, если файл не кончается новой строкой. И многие редакторы сами ее добавляют

Проксимов
08.07.2018
12:51:11
А
Я понял прикол

Google

Проксимов
08.07.2018
12:51:23
>> не писал в файл
Сука
Говорил же, очевидное

Aragaer
08.07.2018
12:51:40
почему не писал?

Проксимов
08.07.2018
12:51:55

Denis
08.07.2018
12:52:09
а разница какая*

Aragaer
08.07.2018
12:52:10
может от шелла зависит

Denis
08.07.2018
12:52:21
типо одна стрелка аппенд

Aragaer
08.07.2018
12:52:23
по-моему какой-то шелл >> делает только в том случае, если файл существует

Denis
08.07.2018
12:52:24
две флуш

Aragaer
08.07.2018
12:52:31
нет, наоборот
две - аппенд, одна - перезаписать

Denis
08.07.2018
12:52:38
да наоборот

Google

Denis
08.07.2018
12:52:48
не баш точно и так и сяк создает файл

Aragaer
08.07.2018
12:52:52
но одна работает всегда, а две (в некоторых шеллах) только если файл существует

Проксимов
08.07.2018
12:52:54
Магия

Aragaer
08.07.2018
12:53:01
а кто сказал, что в кроне баш?

Denis
08.07.2018
12:53:02

Проксимов
08.07.2018
12:53:13

Denis
08.07.2018
12:53:17
вот в том то и прикол
там sh

Tishka17
08.07.2018
12:53:40

Aragaer
08.07.2018
12:53:42
sh может быть симлинкой на что-нибудь
и не всегда это bash
и то, на что указывает sh, может вести себя так, что >> не создает файл

Denis
08.07.2018
12:54:05
sh это sh не баш короч

Tishka17
08.07.2018
12:54:11
Даже если sh это симлинк на баш, у него включается режим совместимости

Aragaer
08.07.2018
12:54:14
собственно в убунте sh это dash и именно там я такое и встречал

Ляман
08.07.2018
12:54:39
Есть примеры работы cron? На ютубе и в гугле не могу найти нормальных объяснений

Проксимов
08.07.2018
12:54:43
Так я запутался совсем
В кроне >> дозапись, > перезапись + создание?

Aragaer
08.07.2018
12:55:10
в кроне запуск sh

Google

Denis
08.07.2018
12:55:10

Aragaer
08.07.2018
12:55:30
сделай ls -l /bin/sh
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 May 4 02:44 /bin/sh -> bash
у меня в генте так

Denis
08.07.2018
12:56:13
сорян я пропиздился
даже и не задумывался никогда

Проксимов
08.07.2018
12:56:27
Ага

Denis
08.07.2018
12:56:29
у меня даш

Проксимов
08.07.2018
12:56:30
Хитро

Aragaer
08.07.2018
12:56:46
и попробуй сделать sh

Tishka17
08.07.2018
12:56:49
Да забудьте кто исполняет sh.

Aragaer
08.07.2018
12:56:51
а потом >> /tmp/some_file
8)
кронтаб исполняет sh
отсюда и проблемы
есть надежный способ делать дозапись

Tishka17
08.07.2018
12:57:31
В смысле, даже если sh это баш - это не то же самое, что вызвать баш

Сергей
08.07.2018
12:57:33
Везде? Я не сталкивался
И не только в кроне, а во многих конфигах.
Это повелось с давних времен ненадежных линий связи с частыми обрывами соединений.
Других способов проверить полноту конфига (что его не обрезало во время передачи), кроме как проверкой EOF, тогда не умели.

Aragaer
08.07.2018
12:57:46
some_script.py | tee -a output > /dev/null

Google

Проксимов
08.07.2018
12:57:52

Tishka17
08.07.2018
12:58:27
Зачем tee?

Aragaer
08.07.2018
12:58:31
tee это распараллеливатель потоков
-a это дозапись

Проксимов
08.07.2018
12:58:37

Andre
08.07.2018
12:58:44
как из строки вида 1. [x] blabla сделать [x] 1. blabla при помощи регулярных выражений?

Aragaer
08.07.2018
12:59:01
потому что он уже не нужен - его копия ушла в нужный файл

Проксимов
08.07.2018
12:59:01

Aragaer
08.07.2018
12:59:18
собссно это из такой конструкции:
echo чота | sudo tee -a куда-то

Проксимов
08.07.2018
12:59:28

Aragaer
08.07.2018
12:59:46
если куда-то не доступно на запись без прав рута, то sudo echo чота > куда-то не покатит

Проксимов
08.07.2018
12:59:59

Tishka17
08.07.2018
12:59:59
s/1\.\[x\] blanlabla/[x]1. blablabla

Andre
08.07.2018
13:00:02
Слишком мало входных данных
1. [x] first task
2. [] second task
3. [x] third task
нужно везде поставить чекбокс вперед, а цифру после него

Aragaer
08.07.2018
13:00:53
У меня права рута))
крч в ситуации, когда перенаправление средствами шелла не работает, можно использовать tee с нужными флажочками
оно уже правильно все сделает

Tishka17
08.07.2018
13:01:34
Окей. s/^(\d+\.) (\[x?\])/\2 \1/
Как-то так. Мог с экранированием ошибиться

Aragaer
08.07.2018
13:02:11
все норм

Google

Andre
08.07.2018
13:02:54

Tishka17
08.07.2018
13:03:00
Хз

Aragaer
08.07.2018
13:03:22
должен вроде

Tishka17
08.07.2018
13:04:13
Вроде да

Jentry
08.07.2018
13:11:51

Aragaer
08.07.2018
13:13:04
\g<2> is therefore equivalent to \2, but isn’t ambiguous in a replacement such as \g<2>0. \20
так что не, \1 и \2 сгодятся

Jentry
08.07.2018
13:15:07
читается много лучше, \\1 еще экранировать нужно

Andre
08.07.2018
13:17:37

Aragaer
08.07.2018
13:18:13
с r' не надо ничего экранировать

Andre
08.07.2018
13:18:34
input = '1. [x] В боковом меню убрать Отчет по разрешениям.'
p = re.compile(r'^(?P<num>\d+\.) (?P<checkbox>\[(x| )\]) (?P<text>.*)$')
output = p.sub(r'\g<checkbox> \g<num> \g<text>', msg)
вот что у меня получилось в итоге

Aragaer
08.07.2018
13:19:36
и сравните это с s/^(\d+\.) (\[.\])/\2 \1/

Andre
08.07.2018
13:21:27

Aragaer
08.07.2018
13:21:49
это синтаксис pcre

Jentry
08.07.2018
13:22:24

Aragaer
08.07.2018
13:22:44
в питоне придется писать re.sub(r'^(\d+\.) (\[.\])', r'\2 \1')
а чего тут читать?
начало строки, захватить одну и более цифр с точкой, затем пробел, потом захватить квадратные скобки с произвольным символом между ними. Заменить на то же самое в обратном порядке

Andre
08.07.2018
13:23:35

Aragaer
08.07.2018
13:24:06
я бы попытался обойтись без регекспов вообще на самом деле
number, checkbox, text = msg.split(' ', 2)
result = ' '.join([checkbox, number, text])