Удаление подстроки в sed

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Удаление подстроки в sed

Сообщение sciko »

Цель удалить всё содержимое строки после первого символа ":" во всех строках

Код: Выделить всё

$ cat sed.txt|iconv -f cp1251
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:Разрешается повторное распространение и использование как в виде исходного кода,
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * При повторном распространении исходного кода должны оставаться указанное
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        выше уведомление об авторском праве, этот список условий и последующий
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * При повторном распространении двоичного кода в документации и/или в
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        других материалах, поставляемых при распространении, должны сохраняться
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        указанная выше информация об авторском праве, этот список условий и
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        последующий отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
$ sed -e 's/:.*$//' sed.txt|iconv -f cp1251
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:Разрешается повторное распространение и использование как в виде исходного кода,
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:так и в двоичной форме, с изменениями или без, при соблюдении следующих условий
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * При повторном распространении исходного кода должны оставаться указанное
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        выше уведомление об авторском праве, этот список условий и последующий
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * При повторном распространении двоичного кода в документации и/или в
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        других материалах, поставляемых при распространении, должны сохраняться
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        указанная выше информация об авторском праве, этот список условий и
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:        последующий отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h:      * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
$ sed -e 's/:.*//' sed.txt|iconv -f cp1251
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hРазрешается повторное распространение и использование как в виде исходного кода,
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hтак и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hПри повторном распространении исходного кода должны оставаться указанное
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hвыше уведомление об авторском праве, этот список условий и последующий
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hотказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hПри повторном распространении двоичного кода в документации и/или в
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hдругих материалах, поставляемых при распространении, должны сохраняться
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hуказанная выше информация об авторском праве, этот список условий и
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hпоследующий отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hНи название Cognitive Technologies, ни имена ее сотрудников не могут


ЧЯДНТ?

UPD. Так тоже не проходит:

Код: Выделить всё

$ sed -e '/\([^:]*\):/s//\1/' sed.txt|iconv -f cp1251
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hРазрешается повторное распространение и использование как в виде исходного кода,
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.hтак и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h      * При повторном распространении исходного кода должны оставаться указанное
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h        выше уведомление об авторском праве, этот список условий и последующий
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h        отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h      * При повторном распространении двоичного кода в документации и/или в
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h        других материалах, поставляемых при распространении, должны сохраняться
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h        указанная выше информация об авторском праве, этот список условий и
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h        последующий отказ от гарантий.
/home/sciko/temp/cuneiform-0.7.0+dfsg/cuneiform_src/Kern/rverline/src/h/vl_rule.h      * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Удаление подстроки в sed

Сообщение watashiwa_daredeska »

Надо сначала iconv, а потом уже sed.
Спасибо сказали:
flank'er
Сообщения: 496
Статус: слаковщик
ОС: Slackware64

Re: Удаление подстроки в sed

Сообщение flank'er »

а почему именно sed ? задача как раз для awk

Код: Выделить всё

cat sed.txt| awk -F ":" '{print $1}'
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Удаление подстроки в sed

Сообщение t.t »

Да и зачем тут sed-то? cut -d: -f1
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Удаление подстроки в sed

Сообщение sciko »

watashiwa_darede... писал(а):
02.07.2010 10:42
Надо сначала iconv, а потом уже sed.
Не получится. Там в файле, для которого sed отлаживаю (а здесь выложил только head файла чтобы не загромождать вывод), кроме cp1251 ещё и другие кодировки есть. Вот на них iconv и спотыкается, ругается и бьёт файл.

flank'er писал(а):
02.07.2010 10:50
а почему именно sed ?
Хочу понять почему не работает. Чтобы не попасть на грабли в следующий раз.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Удаление подстроки в sed

Сообщение t.t »

Попробуйте всё же cut. Ему, насколько я помню, плевать на кодировки.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Удаление подстроки в sed

Сообщение sciko »

Конечно, спасибо за настоятельные советы, но это был модельный пример. Основная цель этого топика: разобраться в причинах, чтобы не попадаться, и если есть возможность, то как обойти ограничение.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Удаление подстроки в sed

Сообщение /dev/random »

Для корректной работы sed желательно, а в некоторых случаях необходимо, чтобы текущей локалью для него была установлена та кодировка, в которой идёт обрабатываемый им текст.

Upd: можно либо сконвертировать текст в текущую локаль перед обработкой, а после обработки - обратно, либо установить для sed другую локаль через LC_ALL.

Upd2: и команды sed'а тоже должны быть заданы в текущей (или установленной) для него кодировке.
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Удаление подстроки в sed

Сообщение sciko »

А если в файле мешанина из cp1251, cp866 и utf-8 (такой файл собственно и обрабатываю), то какую кодировку ставить?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Удаление подстроки в sed

Сообщение watashiwa_daredeska »

sciko писал(а):
02.07.2010 10:58
Не получится. Там в файле, для которого sed отлаживаю (а здесь выложил только head файла чтобы не загромождать вывод), кроме cp1251 ещё и другие кодировки есть. Вот на них iconv и спотыкается, ругается и бьёт файл.
Тогда LC_ALL=C sed bla-bla-bla.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Удаление подстроки в sed

Сообщение /dev/random »

sciko писал(а):
02.07.2010 11:16
А если в файле мешанина из cp1251, cp866 и utf-8 (такой файл собственно и обрабатываю), то какую кодировку ставить?

Ставить локаль LC_ALL=C (или LC_ALL=POSIX) и ни в коем случае не использовать локализованных символов в командах sed'а
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Удаление подстроки в sed

Сообщение sciko »

Всем спасибо! Вроде более-менее разобрался.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Удаление подстроки в sed

Сообщение sash-kan »

sciko писал(а):
02.07.2010 11:16
А если в файле мешанина из cp1251, cp866 и utf-8 (такой файл собственно и обрабатываю), то какую кодировку ставить?
ввиду неюзабельности такой мешанины предлагаю с неё и начать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Удаление подстроки в sed

Сообщение sciko »

Не понял что имел ввиду sash-kan, но видимо что-то умное.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Удаление подстроки в sed

Сообщение sash-kan »

sciko писал(а):
02.07.2010 13:54
Не понял что имел ввиду sash-kan, но видимо что-то умное.
логичнее привести файл к одной кодировке.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Удаление подстроки в sed

Сообщение /dev/random »

iУведомление от модератора
Флейм о кодировках отрезан: Война кодировок
Спасибо сказали: