Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

> 

Темы от студентов с запросами готовых решений по заданиям закрываются не глядя.

 
Reply to this topic Start new topic
> Скопировать первую строку из файла , удалить ее и, Копировать вставить удалить
froa
bookmark
gyfbbdvkffmrljmmmwd
Jan 23 2017, в 19:01
Сообщение #1


Новичок
Иконка группы

Сообщений: 11

Вставить имя   :   Цитата

Группа: Участники

Автор темы
Добрый вечер, нужна реализация на shell скрипте следующей задумки
1. открываем файл тхт
2.копируем первую строчку
3.удаляем ее из файла
4.закрываем файл
5.вставляем строчку в файл sh после нужных символов допустим после sait.ru/вот_тут

Реализовано на питоне , но очень нужна реализация на shell скрипте
Реализация на pyton :

Код
def record():
    with open('C:\op\link.txt') as  inp :
        try:
            temp = inp.readlines()
            url = temp.pop(0)
            with open ('C:\op\link.txt','w') as out:
                for i in temp :
                    out.write( i)
                return ''.join(['Сайтюру', url] )
        except IndexError:
            print('1')
PACKAGE = 'com.android.chrome'
ACTIVITY = 'com.google.android.apps.chrome.Main'
COMPONENT = PACKAGE + "/" + ACTIVITY
URI = record()


С помощью shell можно ли подобное сделать ? что бы вставить строчку в этот код :

Код
#!/system/bin/sh
shell
am start -n com.android.chrome/com.google.android.apps.chrome.Main 'http://sait.ru/СЮДА'
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Jan 23 2017, в 20:55
Сообщение #2


grammatikführer
Иконка группы

Сообщений: 12572

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Примерно так:
Код
s=$(head -n1 "$FILE1")
sed -i "s|site\.ru/?|site.ru/$s|" "$FILE2"
sed -i '1d' "$FILE1"
Не проверял. По-хорошему строку надо ещё URL-кодировать и экранировать в ней то, что может быть неправильно интерпретировано sed'ом.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
froa
bookmark
gyfbbdvkffmrljmmmwd
Jan 23 2017, в 21:04
Сообщение #3


Новичок
Иконка группы

Сообщений: 11

Вставить имя   :   Цитата

Группа: Участники

Автор темы
Это выходит как отдельный скрипт ? То есть его нужно запускать отдельно перед запуском моего скрипта ?
В связке это не реализовать ?
Каждый раз при запуске скрипта что бы бралась первая строчка с удалением и вставлялась в нужное место
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Jan 23 2017, в 21:11
Сообщение #4


grammatikführer
Иконка группы

Сообщений: 12572

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

В смысле — чтобы был только один скрипт? Можно, конечно. Какой вопрос Вы задали, на тот я и отвечал. Замените вторую строчку приведённого мной кода на нужную команду, и всех дел.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
ormorph
bookmark
gyfbbdvkffmrljmmmwd
Jan 23 2017, в 23:18
Сообщение #5


Бывалый
Иконка группы

Сообщений: 435

Вставить имя   :   Цитата

ОС: Gentoo

Группа: Участники

Смотрю тут андроид, если нет прав root могут быть проблемы с реализацией т.к. может отсутствовать sed и т.п.
Для android 5.0 и выше root не обязателен, есть пакет termux, он позволяет запускать bash установить wget отдельно, т.к. wget входящий в busybox урезанный. В данном пакете программы устанавливаются через apt.
Go to the top of the page
 
+Quote Post
ormorph
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 13:15
Сообщение #6


Бывалый
Иконка группы

Сообщений: 435

Вставить имя   :   Цитата

ОС: Gentoo

Группа: Участники

Нашел тут решение на более старые версии Android без рута.
Ставится Terminal IDE, устанавливается система и запускается Terminal IDE.
После этого доступен bash sed и прочие утилиты linux. Конечно решение не такое красивое как в termux, на моем девайсе например не работали комбинации ctrl alt в termux это клавиша громкости. Но для удобства можно соединить по telnet:
На android поднимаем сетевой интерфейс и выполняем:
Код
$ export PS1=#
# telnetd


После этого можно соединиться, на компьютере выполнить:
Код
$ telnet -e '' xxx.xxx.xxx.xxx 8080

Где xxx.xxx.xxx.xxx IP android девайса, посмотреть можно выполнив в Terminal IDE ifconfig.
После будет доступна консоль и будут доступны консольные редакторы nano, vim.
А так n-ю строку можно получить с помощью sed выполнив:
Код
# первая строка
sed '1!d' "$FILE1"
# вторая строка
sed '2!d' "$FILE1"

В скрипте можно заменить head.
Go to the top of the page
 
+Quote Post
froa
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 20:36
Сообщение #7


Новичок
Иконка группы

Сообщений: 11

Вставить имя   :   Цитата

Группа: Участники

Автор темы
все верно , у меня андройд, с root правами и busybox )
Я так понимаю изменять $File На $ /расположение/до/Файла /1.txt ?
У меня скрипт и текстовый файл лежит в одной папке
/storege/sdcard0/Download/link.sh - расположение скрипта
-\\- link.txt - расположение текстового файла , именно с этого файла нужно брать первую строку .
В итоге нужно прогнать через скрипт более 1000 строк
Можно конечно и вручную - но это запарно, на питоне это реализовал уже но разница во времени в 2 раза больше ( python+monkeyrunner 40 сек обработка 1 строки,выполнение скрипта, а на shell до 20 )
Go to the top of the page
 
+Quote Post
ormorph
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 20:56
Сообщение #8


Бывалый
Иконка группы

Сообщений: 435

Вставить имя   :   Цитата

ОС: Gentoo

Группа: Участники

Цитата(froa @ Jan 24 2017, в 21:36) *
все верно , у меня андройд, с root правами и busybox )
Я так понимаю изменять $File На $ /расположение/до/Файла /1.txt ?


Почти так.
В шел File - название переменной в которой содержится путь к файлу, $File возвращает значение переменной File:
Код
# присваивание переменной File
File="/расположение/до/Файла /1.txt "
# вывод на экран значения переменной File
echo $File


Знак долара ставится перед названием переменной, чтобы отличить обычный текст от переменной.
Т.е.
Код
AA="World!"
#Выводит на экран Hello World!
echo "Hello $AA"

Go to the top of the page
 
+Quote Post
ormorph
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 21:25
Сообщение #9


Бывалый
Иконка группы

Сообщений: 435

Вставить имя   :   Цитата

ОС: Gentoo

Группа: Участники

Цитата
В итоге нужно прогнать через скрипт более 1000 строк

Ну тогда зачем вообще удалять строки в файле?
Их можно прогнать по очереди в цикле и никаких сторонних утилит не надо, только средства shell:
Код
#!/system/bin/sh

File="/путь/test1.txt"

while read tmp
do
  am start -n com.android.chrome/com.google.android.apps.chrome.Main "http://sait.ru/$tmp"
done < $File
Go to the top of the page
 
+Quote Post
froa
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 22:03
Сообщение #10


Новичок
Иконка группы

Сообщений: 11

Вставить имя   :   Цитата

Группа: Участники

Автор темы
Спасибо, я запустил скрипт и по началу он не работал. Потом подкрутил его для андройда и как все началось biggrin.gif он начал обрабатывать строки , а паузы я не стал выставлять ибо думал не сработает :DDD Спасибо тебе )
Скинь свой номер чего либо , закину пару соток ))
И еще вопрос . В shell есть такая функция как call на Windows в cmd
что бы запустить внутри на писаного выше цикла .
Насколько успел понять то так :

Код
#!/system/bin/sh

File="/путь/test1.txt"

while read tmp
do
  am start -n com.android.chrome/com.google.android.apps.chrome.Main "http://sait.ru/$tmp"
./путь/до/script.sh
done < $File


Пока он выполняется цикл ждет, как только выполниться последняя команда в script.sh то цикл продолжит ?
Еще раз спасибо !
Вопрос не по теме . С чего начать обучение ? в Shell. Толковый учебник мб или сайт ?
Go to the top of the page
 
+Quote Post
ormorph
bookmark
gyfbbdvkffmrljmmmwd
Jan 24 2017, в 22:48
Сообщение #11


Бывалый
Иконка группы

Сообщений: 435

Вставить имя   :   Цитата

ОС: Gentoo

Группа: Участники

Цитата
Скинь свой номер чего либо , закину пару соток ))

не надо, тут просто спортивный интерес)

Цитата
как только выполниться последняя команда в script.sh то цикл продолжит ?

Ну да.
Для shell обычно Дэвид Тейнсли - Linux и Unix. Программирование в SHELL
Для bash если надо Advanced Bash Scripting Guide, есть русские переводы например тут

Так же значение переменных можно передавать из текущего скрипта в вызываемый, например как тут script.sh. Для этого используются глобальные переменные:

Код
export TMP="белеберда"
/путь/до/script.sh


В script.sh вывести на экран значение глобальной переменной TMP:
Код
echo $TMP

Зы: конструкция вызова скрипта ./ нужна для вызова скрипта из текущего каталога, а так хватит просто указания пути к скрипту без точки впереди.
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 26th July 2017 - в 13:51




Rating@Mail.ru