Чтобы добавлять сообщения и комментарии, .

@L29Ah:
L29Ah

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

@Balancer:
Balancer

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

@Strephil:
Strephil

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

@Strephil:
Strephil

Уиии! Я годен к программированию!
Нарколог и психиатр поставила печать, что годен, а на поиск наибольшего общего делителя на sed смотреть даже не стала.

@Strephil:
Strephil

Почему стоки нумеруются с первой, а не нулевой?
Не программисты что ли?

@Strephil:
Strephil

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

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

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

@Strephil:
Strephil

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

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

Хм :-(

@4DA:
4DA

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

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
```

@Strephil:
Strephil

Интерпретатор lisp, написанный на sed.
Зависть, зависть…
github.com

@qnikst:
qnikst

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

package-db: prefix.cabal-sandbox/postfix

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

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

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

@ng358ex-2:
ng358ex-2

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

@dober:
dober

sed -i '/signature = MD5/a \ \ \ \ \ \ compression = GZIP' file.config

@dober:
dober

атятя
sed -i '/File Retention = 50 days/c\ File Retention = 30 days' bacula-*

@Self-Perfection:
Self-Perfection

Слушайте, а 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

@Strephil:
Strephil

Осознал, что я совсем неправильно понимал, как работает sed. :-(
Я идиот.

@wasd:
wasd

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 >_<

@Strephil:
Strephil

$ echo 'глядите на него' | grep '\<гляд'
$ echo 'глядите на него' | sed -n '/\<гляд/p'
глядите на него
$ echo 'hello world' | grep '\<world'
hello world

@pupoque:
pupoque

for f in *dll; do ln -s $f $(echo $f | sed -e s/dll/DLL/) ; done

@Strephil:
Strephil

Я только сейчас почему-то догадался до такого использования:
$ echo hello > world
$ echo 's/$/!/' | sed -f — world

какой я глупенький.

@Strephil:
Strephil

$ echo -e 'a\r' | sed 's/$/"/'
"

Arch Linux,
glibc 2.16.0-4
sed 4.2.1-4

@Strephil:
Strephil

Вот, забавы ради написал на sed, точнее, на GNU sed: pastebin.com <pastebin.com>
У меня работает.

@Oksion:
Oksion

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

@Strephil:
Strephil

Интересно, во сколько раз чаще я запускаю sed, чем думаю о том, что у меня нет и никогда не будет тян?

@Strephil:
Strephil

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

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

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

@don-Rumata:
don-Rumata

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

@xGreen:
xGreen

Преобразование окончания строк из формата DOS (CR/LF) в формат Unix (LF): sed 's/.$//' old.file > new.file

@don-Rumata:
don-Rumata

sed "s/[/]/\\\\"/g
Заменить слеш на бэкслеш.
4 бэкслеша - потому что экранируем "\\". Как в echo -e \\.

@Irregular:
Irregular

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

@anton0xf:
anton0xf

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

@don-Rumata:
don-Rumata

sed -e '/^#/d' filename.ext > modifiedfilename.ext

Удаляет строки начинающиеся с #.
http://forum.ixbt.com/topic.cgi?id=76:7820

@helgi:
helgi

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

@ramok:
ramok

GNU sed 4.2.2 will have an F command to print the current filename being processed

@ramok:
ramok

не удержался и сделал весию "прЮвета" #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'

@wasd:
wasd

Блин, как я это буду через 2 месяца читать? T_T

@vbooh:
vbooh

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

@vbooh:
vbooh

Короткая инструкция с пояснениями для поиска многострочных шаблонов sed'ом:
main.rtfiber.com.tw

@anton0xf:
anton0xf

а sed'ом чтоли никак не отрезать конец файла по заданному регэкспу-разделителю?

@Gem:
Gem

Полезные одно-строчные скрипты sed (sed shell) opennet.ru
Вопрос знатокам sed — замена символов с файле opennet.ru

@xorkrus:
xorkrus

Расположить весь текст по правому краю столбца шириной в 79 символов:
sed -e :a -e 's/^.\{1,78\}$/ &/;ta' (устанавливает как 78 плюс 1 пробельный символ)
(c) opennet.ru
Почему у меня не работает? Текст остается весь...

@claque:
claque

А как заставить sed разбирать регулярное выражение нежадно?