← All posts tagged sed

Strephil
sed

Есть задача: поменять местами две соседние строчки. И у меня не получилось простого решения на sed.
Есть решение с регуляркой, вот меняются местами 2 и 3 строчки:
seq 1 3 | sed '/2/{N;s/\(.\)\n\(.\)/\2\n\1/}'
но мне кажется, что регулярка тут лишнее и недостаточно изящное. мне бы хотелось решить это через hold space.

seq 1 3 | sed '/2/{x;n;G}'
получается лишняя пустая строка.

seq 1 3 | sed '/2/{h;n;G}'
строка два повторяется два раза.

Strephil

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

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

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

Strephil

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

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

Хм :-(

Strephil

Ребята, я потихоньку офигеваю.
Въ Squeeze sed и grep ведутъ себя полностью противоположно. Куда ужь противоположнѣе!
# echo ПРИВЕТ | LANG=en_US.UTF-8 sed -n '/[а-г]/p'
# echo ПРИВЕТ | LANG=C sed -n '/[а-г]/p'
ПРИВЕТ

Вродѣ как, есть в Debian bug bugs.debian.org
но онъ же не совсѣмъ объ этомъ???

Strephil

Продолжая #962287
Back-references не поддерживаются только при работѣ съ Extended POSIX regexes, съ BASIC — все работаетъ. Маны нужно читать внимательнѣе, тамъ написано не только про ‘dreadful botch’ , но и сказано, гдѣ этотъ ‘botch’ работаетъ, а гдѣ — нѣтъ.

Strephil

GNU такое GNU…
На не самомъ сложномъ регвырѣ время работы egrep съ увеличенiемъ входной строки растетъ экспоненцiально, sed же используетъ оптимизацiи.
$ echo clcclcabab====Kabcl | egrep '(.*)+.*K\1'
$ echo clcclcabab====Kabcl | sed -nr '/(.*)+.*K\1/p'
Попробуйте увеличить число символов «=» до 15 штук и почувствуйте разницу.
egrep пытается использовать этотъ свой DFA что-ли?

Мну использовал: ОС GNU, ядро Linux, sed 4.2.1, grep 2.7

Strephil

Есть друг, есть Slackware [1]
Еще друга можно заставить изучать sed.[2] Я [3] поставил задачку: "Дана строка. Записать любое слово сзаду".
Код, написанный мелком, оказался неверным, [4] пришлось отлаживать [5]. Этот код работает [6].
Кидать в друга ножом? Нет, для этого есть пеньки [7]
Omploaded:
[1] omploader.org (разрешение высокое, зато видна Слака)
[2] omploader.org
[3] omploader.org
[4] omploader.org
[5] omploader.org
[6] omploader.org
[7] omploader.org