URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6795
[ Назад ]

Исходное сообщение
"sed и awk скрипт"

Отправлено evi9 , 28-Сен-07 17:29 
Подскажите, как удалить из файла подстроку, начиная с символа номер 62 и до конца строки (перевод каретки) ?


Содержание

Сообщения в этом обсуждении
"sed и awk скрипт"
Отправлено pasha , 28-Сен-07 17:57 
>Подскажите, как удалить из файла подстроку, начиная с символа номер 62 и
>до конца строки (перевод каретки) ?
>

s/\(.\{62\}\).*/\1/g


"sed и awk скрипт"
Отправлено evi9 , 28-Сен-07 17:59 
>>Подскажите, как удалить из файла подстроку, начиная с символа номер 62 и
>>до конца строки (перевод каретки) ?
>>
>
>s/\(.\{62\}\).*/\1/g

опс! спасибо.

а как это написать?

cat file .... ???



"sed и awk скрипт"
Отправлено newser , 28-Сен-07 18:19 
>[оверквотинг удален]
>>>до конца строки (перевод каретки) ?
>>>
>>
>>s/\(.\{62\}\).*/\1/g
>
>опс! спасибо.
>
>а как это написать?
>
>cat file .... ???

cat file | sed '...'

Учите матчасть!


"sed и awk скрипт"
Отправлено vic , 28-Сен-07 18:20 
>[оверквотинг удален]
>>>до конца строки (перевод каретки) ?
>>>
>>
>>s/\(.\{62\}\).*/\1/g
>
>опс! спасибо.
>
>а как это написать?
>
>cat file .... ???

sed 's/\(.\{62\}\).*/\1/g' < file.in > file.out


"sed и awk скрипт"
Отправлено evi9 , 28-Сен-07 19:38 
не , не работает :( наверное я не правильно поставил условие,
так как написано sed 's/\(.\{62\}\).*/\1/g' делается отсечение всего текста в каждой строке после 62ого символа,

а нужно сделать, так, чтобы был найден символ в тексте 62 (этот символ может быть и на второй и на третьей, на любой строке) и потом удалить из файла подстроку, начинающуюся на символе 62 и заканчивающуюся возвратом каретки ( до конца строки), и все, остальные строки не трогать.


"sed и awk скрипт"
Отправлено jd , 28-Сен-07 20:31 
>а нужно сделать, так, чтобы был найден символ в тексте 62 (этот
>символ может быть и на второй и на третьей, на любой
>строке) и потом удалить из файла подстроку, начинающуюся на символе 62
>и заканчивающуюся возвратом каретки ( до конца строки), и все, остальные
>строки не трогать.

Приведите пример входного файла и того, что должно получиться, а то непонятно, что вам нужно.


"sed и awk скрипт"
Отправлено evi9 , 28-Сен-07 21:22 
>Приведите пример входного файла и того, что должно получиться, а то непонятно,
>что вам нужно.

входной:

s asda gf<eol>
kjhtufndsjuwf sdsf dsfdsfwrewr<eol>
werwerwer wrw<eol>
gfdgdfgd gfdgfgfgdfgdfgdf<eol>
.....
gfdg dgfdf dgfdfgdgfdgf<eol>


нужно удалить блок, начинающийся с символа номер 15 и заканчивающийся концом строки,
т.о. на выходе должно получиться:
s asda gf<eol>
kjhtu<eol>
werwerwer wrw<eol>
gfdgdfgd gfdgfgfgdfgdfgdf<eol>
.....
gfdg dgfdf dgfdfgdgfdgf<eol>
  
или еще вариант, нужно удалить блок, начинающийся с символа номер 11 и заканчивающийся номером 14, т.о. на выходе должно получиться:

s asda gf<eol>
kfndsjuwf sdsf dsfdsfwrewr<eol>
werwerwer wrw<eol>
gfdgdfgd gfdgfgfgdfgdfgdf<eol>
.....
gfdg dgfdf dgfdfgdgfdgf<eol>

Как можно такие правила реализовать на sed? Читаю сейчас доки, не могу найти похожие примеры :(


"sed и awk скрипт"
Отправлено anonymous , 01-Окт-07 20:35 
>нужно удалить блок, начинающийся с символа номер 15 и заканчивающийся концом строки

а можно вопрос: почему нельзя использовать cut(1): cut -c -15? Что за задача, коя требует таких извращений?


"sed и awk скрипт"
Отправлено zbl , 02-Окт-07 15:22 
>нужно удалить блок, начинающийся с символа номер 15 и заканчивающийся концом строки,

Судя по всему, символ перевода строки символом не считается?
Думается, тут проще всего взять awk или Perl, или Ruby, да прочитать файл посимвольно...
awk, наверное, более всего подходит...
bash$ echo abcdefghij$'\n'1234567890 | \
      awk -vF=15 -vWC=0 \
      '{if(WC + length() >= F) print substr($0,0,F+1-WC); else WC+=length()}'
Тут WC -- счётчик символов, а F -- номер символа, начиная с которого нужно резать строку.