to post messages and comments.

sed ?

Есть такой вот текстик: bpaste.net
Нужно для всех строк, которые начинаются с '! ', выдернуть хуйню которая после восклицательного знака идёт, в том и только том случае, когда в соответствующем параграфе упоминается подстрока '/[0-9][0-9.]*='. Чот не пойму, как это сделать на sed, поскольку принятие решения о N зависит от следующей строки. М? // не работает: sed -ne '/^! {N;N;:b; /{N;b b};p}'

Глупый вопрос. Как через sed заменить подстроку в файле без использования любых регулярных выражений, т.е. тупо строку на строку? Или как через replace заменить подстроку в файле с игнорированием регистра. Есть идеи или придётся городить велосипед на perl?

Сегодня выходит OpenBSD 5.8
Среди изменений:
sed (1) -i optopn added
Ещё немного, и этим действительно можно будет пользоваться.

НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА НЕЛЬЗЯ ПОЛЬЗОВАТЬСЯ ГНУТЫМИ РАСШИРЕНИЯМИ!!!1111

$sed -i "s/t/u/" test изменяет test, даже если запись в него запрещена.

Действительно, они же не в файл ведут запись. Они создают новый файл,
пишут в него, потом старый файл стирают, а новый переименовывают.
Казалось бы, причём тут Путин? А притом, что "Никаких русских войск
на территории Украины нет!"

Меня спросили, есть ли в bash битовые операции с числами, &, | и т.п.
Я ответил, что нет, конечно, но это всё очень легко можно сделать на sed.

$ echo $((255 & 0xf0))
240

Хм :-(

Вот тут у меня бомбануло от наркоманского седовсокого синтаксиса.
Чем конкретно этот пример лучше, что говноскрипт на питушоне(или любом другом языке) такого же размера?

stackoverflow.com
```
sed -n ' # turn off default printing
dog{ # if the line matches "dog"
h # put it in hold space
:a # label "a" — the top of a loop
n # fetch the next line
something{ # if it matches "something"
p # print it
x # swap hold and pattern space
bb # branch out of the loop to label "b"
} # done with "something"
# if we're here, the line doesn't match "something"
H # append pattern space to hold space
x # swap hold and pattern space
s/\([^\n]\)\n\([^\n]\)$/\2\n\1/ # see below
x # swap hold and pattern space
ba # branch to the top of the loop to label "a"
} # done with "dog"
:b # label "b" — outside the loop
# print lines that don't match and are outside the pair
p # also prints what had been accumulating in hold space
' inputfile
```

в файле строку вида:

package-db: prefix.cabal-sandbox/postfix

нужно превратить в:

package-db: prefix.cabal-sandbox/postfix:/prefix/.cabal-sandbox-shared/postfix

как наиболее просто?

Есть строчка вида \path\to\file01 Вопрос — как с помощью первотэга\второтэга\whatever забить файл такими же строчками, идущими по порядку до заданного значения?

sed

Слушайте, а sed коварен! Вот хочу я в скрипте добавлять в /etc/hosts строку "127.0.1.1 myhost.fqdn", при этом удаляя уже имеющиеся там строки с подстрокой myhost.fqdn. Пробую:
sed -i -e '/myhost.fqdn/d' -e "$ a 127.0.1.1 myhost.fqdn" /etc/hosts
На первый взгляд оно работает, но потом оказывается, что если в /etc/hosts уже есть myhost.fqdn последней строкой, то после этого однострочника последняя строка пропадает, а новая не дописывается. Решение — поменять местами действия:
sed -i -e "$ a 127.0.1.1 myhost.fqdn" -e '/myhost.fqdn/d' /etc/hosts

KERNELTABLE="`ip r | sed -rn '/^((([0-9]{1,3}\.?){4}|default)(\/[0-9]+)? via ([0-9]{1,3}\.?){4} dev [a-z0-9]+)/p' | sort`"; SYSCONFIG="`cat /etc/sysconfig/network/*route* | sed -rn '/^((([0-9]{1,3}\.?){4}|default))/{s/ / via /;s/ - / dev /;s/$/ /;p}' | sort`"; if [[ x$KERNELTABLE == x$SYSCONFIG ]]; then echo 0; else echo 1; fi

осталось придумать, как sort вкостылить в sed >_<

господа линуксоиды, у вас есть шанс реально доказать превосходство линукса над остальными недооперационками, помогите пожалуйста как-то распарсить html файл. Суть в том что нужно найти в нём текст по шаблону <set value='значение' name='дата' /> и сделать из этого csv вида "значение, дата"

А вот нельзя ли как-нибудь подобным образом вывести единичку:

echo 31 | sed 's/../\x&/'

так не работает. может быть, есть и другой способ?

rsync example.com::module/ | sed -e 's/^.\{43\}//' для протокола рсинк (К.О.) равносилен curl --list-only для ftp. Т.е. выдаёт чистый список файлов без мусора.
sort --version-sort и --no-motd добавлять по вкусу.

Нерадивые фансабберы отходят от спецификаций и пишут \alpha(FF) вместо \alpha&HFF&. В такие моменты во мне просыпается красноглазый любитель sed и лепит однострочники вроде этого:
ls -1 *.mkv | sed -r 's|(.*)mkv|mkvextract tracks "\0" 3:"\1ass"\nsed -i -r "s/[\\]alpha\\(([^)]*)\\)/\\\\alpha\\\&H\\1\\\&/g" "\1ass"|' | sh

как сделать вот такое?:
sed -i '0r file1' file2
и почему так оно не работает?
(кажется, что где-то это уже обсуждали, но не могу вспомнить)

Есть задачи по редактированию текста, с которыми обычные редакторы (нет, не vi, более обычные) справляются плохо. Примеры: извлечь из файла каждую n-тую строку; собрать из двух файлов один, чередуя строки.
Первая задача решается просто:
$ sed -n '0~4p' file
Как решить вторую, я что-то не нашёл.

не удержался и сделал весию "прЮвета" #1444246 на sed: clear; echo | sed -e 's,.*,_\\\\||//_|/\\|,;h;:z1;g;s/\n//;:z2;s/^\(.\)\(.\)\(.*\)/'$(tput cuu1)'\1o\2 - .oO(ПрЮвет!)\n\3/;H;s/\n.*//;w /dev/tty' -e 's/.*/sleep 0.15/e;g;s/\n.*//;x;s/.*\n//;/^$/!bz2;bz1'

В sed'е, во всяком случае gnu'том, символы группировки '()' и символ ИЛИ '|' необходимо экранировать, чтобы они работали как соответствующие спецсимволы.