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?

НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА
НИКОГДА НЕЛЬЗЯ ПОЛЬЗОВАТЬСЯ ГНУТЫМИ РАСШИРЕНИЯМИ!!!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
```

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 вида "значение, дата"

Нерадивые фансабберы отходят от спецификаций и пишут \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

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