2014-10-20 4 views

ответ

3

Использование awk:

$ awk -v x=2 -v y=3 '0==NR%2 {$0=substr($0,x+1,length($0)-y-x)} 1' file 
1 
BBBBB 
2 
DD 

Как это работает:

  • -v x=2 -v y=3

    В -v параметры определяют наши две переменные, x и y.

  • 0==NR%2 {$0=substr($0,x+1,length($0)-y-x)}

    NR это счетчик линии. Когда 0 == NR%2, мы находимся на четной линии, и мы удаляем x символов с самого начала и y с конца. В awk, $0 - вся строка. Мы заменяем подстрокой, которая начинается в позиции x+1 и имеет длину length($0)-y-x.

  • 1

    Это загадочное сокращение для печати линии.

3

Gnu СЭД имеет оператор адреса ~ шаг. 2~2 означает «начать в строке 2, соответствовать каждой второй строке».

x=2 
y=3 
sed "2~2{s/^.\{$x\}//;s/.\{$y\}$//}" input 
2
perl -pE '$_=substr($_,'$x',-'$y')."\n" unless $. %2' 
0

Это может работать для вас (GNU СЭД):

sed -r 'n;s/^.{2}(.*).{3}$/\1/' file 

или если вы хотите параметризовать:

x=2 y=3 
sed -r "n;s/^.{$x}(.*).{$y}$/\1/" file 

Где n печатает нечетные строки рисования в четных линий команда подстановки.

Смежные вопросы