• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Выборка из файла

  • Автор темы Sliva
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sliva

И снова файлы :) помогите, пожалуйста!
Команды head и tail делают горизонтальные выборки из файла. Написать командный файл, который будет обеспечивать вертикальные выборки. Интерфейс такой:
colls n1 n2 имя_файла
В стандартный выходной файл должны выводится символы файла имя_файла, начиная с позиции n1 и заканчивая позицией n2. Если параметр n2 не задан, то выводятся позиции, начиная с n1 и до конца строки.
 
Z

zugr

1. См.команду gawk
substr(s, i [, n])

возвращает n-символьную подстроку строки s, начиная с i. Если n не указано, то возвращается остаток строки s.​
2. См. команду sed

(2)s/регулярное_выражение/замена/флаги
Подставить замену вместо фрагментов буфера, отождествленных с регулярным_выражением. Вместо / можно использовать любой символ. Детали см. в .
Флаги могут быть опущены или иметь следующие значения:​
g Заменить все вхождения регулярного_выражения, а не только первое.

p Если замена произошла, вывести содержимое буфера.

w з_файл Если замена произошла, добавить содержимое буфера к з_файлу.

3. Можно на bash вконце концов реализовать (См. Подстановка значений параметров, Подстановка подстрок.)
 
Z

zugr

;) Мне и надо на bash ;)
Код:
#! /bin/bash

declare -i startpos="$1"
shift
declare -i len="$1"
shift

cat $1 | while read a; do
if (( len != 0 )); then
echo "${a:$startpos:$len}"
else
echo "${a:$startpos}"
fi	
done
if (( len != 0 )); then
echo "${a:$startpos:$len}"
else
echo "${a:$startpos}"
fi

Код:
$ bash ./a.sh 4 0 ./a.sh
bin/bash

are -i startpos="$1"
t
are -i len="$1"
t

$1 | while read a; do
( len != 0 )); then
"${a:$startpos:$len}"

"${a:$startpos}"


( len != 0 )); then
"${a:$startpos:$len}"

"${a:$startpos}"


$ bash ./a.sh 4 3 ./a.sh
bin

are
t
are
t

$1
( l
"$

"$


( l
"$

"$


$


Слегка надо подкоректировать:
Правильнее писать
Код:
...
cat "$@" | while read -r a; do
...
А то если в имени файла есть пробелы, будут ошибки.
 
S

Sliva

:) Благодарю! А я начала писать так:
Код:
#!/bin/bash
echo "Введите n1:" 
read n1
echo "Хотите ввести n2? (y/n)"
read answer
if [[ $answer="y" ]] then 
echo "Введите n2:"
read n2
fi
while read do
... 
done
А что в цикле писать не пойму.
Чтобы выполнить - нужно предварительно файл создать? Или можно открыть из имеющихся? Извините за глупые вопросы :(
 
Z

zugr

:) Благодарю! А я начала писать так:
Код:
#!/bin/bash
echo "Введите n1:" 
read n1
echo "Хотите ввести n2? (y/n)"
read answer
if [[ $answer="y" ]] then 
echo "Введите n2:"
read n2
fi
while read do
... 
done
А что в цикле писать не пойму.
Чтобы выполнить - нужно предварительно файл создать? Или можно открыть из имеющихся? Извините за глупые вопросы :(
1. Зачем задавать вопросы если уже в первом вопросе был оговорён формат:
Код:
colls n1 n2 имя_файла
2. В цикле просто выводится строки полученные командой read,
Код:
echo
но не полностью, а только с указаной позиции, и только указанное количество
Код:
echo "${a:$startpos:$len}"
и если колическво равно 0,
Код:
if (( len != 0 )); then
то просто до конца строки.
Код:
echo "${a:$startpos}"
Файл создавать не нужно. Это породит массу дополнительных вопросов:
-- где (в каком каталоге) создать дополнительный файл;
-- какое имя выбрать для дополнительного файла;
-- неповредитли информацию во временном файле паралельные задания других пользователей;
-- как удалять файл в случае непредвиденного останова;
и т.д.

По этому пусть файл(или несколько файлов) читает команда
Код:
cat "$@"
и передаёт его через конвеер (символ "|" перед while) циклу, который и будет его считывать через read
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!