LINUX.ORG.RU

sed - удалить символы с X по Y


0

0
Как sed'ом удалить все символы с X по Y в каждой строке? man sed ниасилил (больно запутанный). Также хотелось бы услышать пояснения что к чему и как здесь должно делаться.
★★★★★
sed 's/X[^Y]*Y//g' или sed 's/X.*Y//g' , задача криво сформулирована.
Laz ★★★★★
()
> с X по Y в каждой строке

X и Y -- позиционные индексы в строке? Т.е. надо удалить, например, с 3 по 8 символы?
sdio ★★★★★
()
Команда cut часом не поможет?
svu ★★★★★
()
Ответ на: комментарий от sdio
>X и Y -- позиционные индексы в строке? Т.е. надо удалить, например, с 3 по 8 символы?

Ага. Именно так.

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel
В увлекательной игре "Битва экстрасенсов" победил sdio.

По теме: sed тут не нужен. Можно только лишь средствами bash обойтись.

$ ddd="1234567890"
$ echo ${ddd:2:4}
4567

Выводит четыре символа, начиная с третьей позиции

чтобы было "Т.е. надо удалить, например, с 3 по 8 символы?" пишем функцию:
$ substring(){ echo ${1:$2:($3-$2)} ; }
$ substring $ddd 3 8
45678
Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz
Опс... моя невнимательность. Сделал наоборот, выделение, а не удаление подстроки.

remsubstring(){
while read ; do
echo -n ${REPLY::$1}; echo ${REPLY:$2:${#REPLY}-$2}
done
}
cat >test.txt <<EOF
1234567890
1234567890
1234567890
EOF

$ cat test.txt | remsubstring 3 8
12390
12390
12390

Заодно и для работы в составе конвейера переделал.

Slavaz ★★★★★
()
Ответ на: комментарий от svu
> Нет такого, что с cut оно проще?
да, есть такое. :)

$ cat test.txt | cut --complement -b '4-8'
12390
12390
12390

Век живи - век учись.
Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz
Отлично. То что надо. Всем спасибо.
fat_angel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.