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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.