LinuxForum.Fans
Тема

Переменные в sed

Автор: vovanvster 41 сообщений 11540 просмотров
#335316

.

#335317
Vascom написал:
text
string_number=`wc -l $file | cut -d ' ' -f1`
for i in `seq 1 $string_number`
do
    sed -n '$i p' $file | cut -f2 -d:
done

Спасибо, сейчас попробую понять
опаньки... а я sed не пользую

Теперь всё откладывается на завтра. Гости пришли и жена шипит. Ща водку буду пить. Завтра к середине дня попробую.
Хэв э найс дей алл, анд найс уикенд.

#335318
yars написал:
[quote=vovanvster]Хотите пару строчек, сами проверите? Не исключаю банальных ошибок со своей стороны.

Я бы с удовольствием, но сейчас я с телефона. Не могу :([/quote]
А мне и не к спеху, так.. Если у Вас будет свободное время от помощи не откажусь.

#335319

string_number=`wc -l $file | cut -d ' ' -f1`
подсчитывает число строк в файле.
И используем это число для формирования цикла.

#335320
Vascom написал:
string_number=`wc -l $file | cut -d ' ' -f1`
подсчитывает число строк в файле.
И используем это число для формирования цикла.

Точно, спасибо огромное, Вы меня сдвинули с мёртвой точки. Но эта жена у меня последняя, не могу с ней спорить. По этому до завтра.
Пытался найти кнопку "сказать пасибо но не нашёл". А как модераторов благодарят ? (это сразу юмор). Но я серьёзно.

#335328

Плюсик под аватаркой можно поставить :)

#335358
yars написал:
Плюсик под аватаркой можно поставить :)

В самом деле, теперь увидел и отправил.

#335420
text
for i in $( sed -n '<вот здесь надо переменную вставить> p' $file | cut -f1 -d: ); do
        <всяка разные команды>
done

sed не хочет делать
Можно ли переменную правильно написать ?

#336212
Vascom написал:
string_number=`wc -l $file | cut -d ' ' -f1`
подсчитывает число строк в файле.
И используем это число для формирования цикла.

Число строк я могу сам задать, чем это поможет ?

#336214
Vascom написал:
text
string_number=`wc -l $file | cut -d ' ' -f1`
for i in `seq 1 $string_number`
do
    sed -n '$i p' $file | cut -f2 -d:
done

Вопрос который я задал с самого начала так и остался всё остальное здесь написанное мне не нужно.
$string_number не могу правильно написать. sed выдаёт ошибку.
Команда в которую надо вставить переменную:

text
for i in $( sed -n '1 p' $file1 | cut -f1 -d: ); do
echo $i | <commands>

sed считывает первую строку из файла и отправляет на обработку.
Первая строка обозначается '1 p'. Единица и есть переменная. Мне надо запустить цикл со значением от 1 до 50 к примеру.
А ещё лучше от единицы до числа строк в файле. Именно это я не могу сделать.

#336216
Vascom написал:
Для этого sed вообще не нужен. Незачем построчно перебирать, если cut весь файл сразу может обработать.
Просто сделай так:
text
cat $file | cut -f1 -d:

А если просто на понимание, то прочитай это http://www.bash-scripting.ru/abs/chunks/index.html
И делай цикл на bash.

Для чего не нужен sed ? Вы меня совсем не поняли. Мне нужна определённая строка а не все вместе.
Скажите как заменить это:

text
sed -n '1 p' file
#336221
yars написал:
[quote=vovanvster]Ты против "cut"? Или отрицание относится к месту действия ? Или ты можешь сказать по заданному вопросу что-нибудь умное но стесняешься ? Или просто настроение плохое и гавкнуть хочется ?
P.S. Выпей водки

Но он там действительно не нужен. Это эквивалентно

text
cut -f1 -d: file

Разница только в том, что в первом случае cut работает с потоком (pipe), а во втором - с файлом напрямую. Ну да это к делу не относится и многим присутствующим известно.[/quote]
Как это не нужен ? Не надо выдёргивать кусок из строки ! cut в скрипте выполняет свою функцию а sed свою.
Что чему эквивалентно ? Какие pipe ? Мне надо чтоб работало а не рассуждения. Если можно сделать:

text
sed -n '1 p' $snt_f | cut -f1 -d: 

без sed прекрасно но скажите как ?
Я сообщаю sed номер строки циферкой '1 p'. Пытался вместо неё писать переменную но не получилось.

#336237

Вместо
'${var} p'
используй двойные кавычки
"$var p"
Одинарные кавычки блокируют раскрытие переменных.
Прекращай тыкать пальцем в небо и прочитай книгу по bash и sed.

#336250
Vascom написал:
Вместо
'${var} p'
используй двойные кавычки
"$var p"
Одинарные кавычки блокируют раскрытие переменных.
Прекращай тыкать пальцем в небо и прочитай книгу по bash и sed.

Одинарные кавычки я использую для конкретного числа. Ты где там переменную увидел ?
Про скобки и кавычки знаю.

text
st="1"
function emlac () {
for i in $( sed -n "$st p" file1 | cut -f1 -d: ); do
    echo $i | sed <commands> -i file2
done
}

Наверное мне надо было с самого начала задать вопрос конкретней.
Что я должен написать в st="1" вместо номера строки? $st должно принимать значения от одного до пятидесяти к примеру.
Или в идеале от одного до тех пор пока в файле file1 не кончатся строки.

#336341

Всё, сам разобрался. Единственное что мне было нужно:
"Переписал решение много раз." Не актуально.

#337060

Все ещё не могу успокоиться. У меня на сегодняшний день вот так получилось:

text
# Функция подстановки логина и пароля в файл ".fetchmailrc"
function fetch () {
# файл с почтами
snt_f="$HOME/file"
# вставка почты в нужную строку
    a=$(sed -n "$st p" $snt_f | cut -f1 -d:)
    echo $a | sed -e "2s/\".*\"/\"$a\"/g" -i $HOME/.fetchmailrc
# ставка пароля в нужную строку
    b=$(sed -n "$st p" $snt_f | cut -f2 -d:)
    echo $b | sed -e "3s/\".*\"/\"$b\"/g" -i $HOME/.fetchmailrc
    fetchmail
}

for st in {1..22}; do fetch done

Вот так не очень глупо ?

#337096

Разве что я бы добавил еще шифрование хранимых в открытом виде паролей, например, при помощи gnupg.

#337098
yars написал:
Разве что я бы добавил еще шифрование хранимых в открытом виде паролей, например, при помощи gnupg.

В моём случае не особо актуально, поскольку доступ к условному файлу со списком с логинами и паролями очень ограничен.
Они в очень домашней директории которая подключается с использованием ufed.
И это Gentoo Hardened.
Но мысль правильная. Однако gnupg использую только в командной строке. И ни разу в скриптах.
Как примерно это надо делать? У меня сложности с использованием скобок, кавычек, шаблонов и экранирующих символов.
Проще говоря с синтаксисом. Ну как всегда у начинающих. Посоветуйте почитать, пожалуйста что нибудь для побыстрее. Общее схватить и > понеслась. Сколько не пробовал учиться на учебниках, не получается. Как-то ближе спарринг/кумите.
Есть цель значит есть мотивация, в процессе реализации или сделал или понял что не твоё.

#337100

Ну, вот один из вариантов использования gpg в скриптах, правда, всего лишь для подписывания и проверки подписи пакетов. Думаю, не составит труда разобраться.

#337101

Угу, спасибо. Разберусь наверное.

Войдите или зарегистрируйтесь, чтобы ответить.