Добрый день!
Никак не могу решить такую проблемку. Как добавить перенос строки в переменную на bash?
Чтобы получить после echo $x примерно такую штуку:
sed '{/q/w/
t
n
}' file
Подскажите, кто-нибудь?)
Перенос строки в переменную
Модераторы: /dev/random, Модераторы разделов
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Перенос строки в переменную
Код: Выделить всё
echo -e "sed '{/q/w\nt\nn\n}' file"
или про замену переноса строки sed'ом?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 8
Re: Перенос строки в переменную
Спасибо за внимание, да. про это.
Или так вообще нельзя сделать? Я вообще в скрипте на bash хочу создать команду sed и ее выполнить. А там должны быть переносы.
Или так вообще нельзя сделать? Я вообще в скрипте на bash хочу создать команду sed и ее выполнить. А там должны быть переносы.
-
- Сообщения: 33
- ОС: Gentoo
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Перенос строки в переменную
1. В sed необязательны переносы. Можно использовать ';' вместо переноса.
2. Я же показал пример, как это делается. Ну и по аналогии.
3. С точки зрения безопасности, программно сгенерённый код для выполнения - дыра в оной. Если что-то создаётся для реальной системы, а не в учебных целях, следует как минимум озаботитьтся проверкой валидности получившегося кода.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 8
Re: Перенос строки в переменную
FatZer, я наугад буквы написал в команде
SLEDopit,
1) Спасибо, так и сделаю
2)Я все-таки хотел именно команду выполнить, а не на экран вывести. Предыдущий пункт меня устроит, но уже интересно, с переносами видимо это не сделать?
3)Мне надо заменить некоторые слова в файлах на слова из других файлов. Разве в любом случае не придется программно код генерить?
SLEDopit,
1) Спасибо, так и сделаю
2)Я все-таки хотел именно команду выполнить, а не на экран вывести. Предыдущий пункт меня устроит, но уже интересно, с переносами видимо это не сделать?
3)Мне надо заменить некоторые слова в файлах на слова из других файлов. Разве в любом случае не придется программно код генерить?
-
- Сообщения: 1744
- Статус: Ъ-участник
- ОС: Debian/Ubuntu/etc
Re: Перенос строки в переменную
Думаю, нужен пример.
Если вы делаете рефакторинг и замеряете имя функции very_long_function_name_265 на short_name, то это ещё можно сделать через sed. А вот наоборот велика вероятность, что вы замените и имя переменной func_short_name. Особенно это весело, когда у вас есть переменная func_very_long_function_name_265. Тогда есть большая вероятность что код скомпилится, но будут появляться мерцающие ошибки.
Поэтому лучше всё 100 раз проверить и лишь 1 раз заменить.
-
- Сообщения: 8
Re: Перенос строки в переменную
И все-таки sed не позволяет заменить перенос на запятую.
Да вообще часто случается, что надо перепроверить 100 раз, в этом наша работа и заключается)
Мне надо регистры заголовочных файлов поменять. Образцы я беру из реальных файлов.
Код:
morozov@cwb:~/BashStudy/test/src$ sed '/[ ]*#include[ ]*</{ s/\([ ]*\)#include\([ ]*\)<Globals.h>\(.*\)/#inlcude<Globals.h>/i
> t
> }' Globals.cpp
#include <object.h>
#inlcude<Globals.h>
#include <generate.h>
morozov@cwb:~/BashStudy/test/src$ sed '/[ ]*#include[ ]*</{ s/\([ ]*\)#include\([ ]*\)<Globals.h>\(.*\)/#inlcude<Globals.h>/i, t
}' Globals.cpp
sed: -e expression #1, char 87: unknown option to `s'
Да вообще часто случается, что надо перепроверить 100 раз, в этом наша работа и заключается)
Мне надо регистры заголовочных файлов поменять. Образцы я беру из реальных файлов.
-
- Сообщения: 1744
- Статус: Ъ-участник
- ОС: Debian/Ubuntu/etc
Re: Перенос строки в переменную
Если разговор идёт о "\n", то sed с переносом строки работает весьма криво и многое зависит от версии sed.
В этом случае лучше использовать perl или python (что знаете лучше).
В этом случае лучше использовать perl или python (что знаете лучше).
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
-
- Сообщения: 8
Re: Перенос строки в переменную
Оу, и правда) С ; все сработало.
Перенос еще попробую сделать.
Спасибо всем.
Перенос еще попробую сделать.
Спасибо всем.
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Перенос строки в переменную
см. уточнение про валидацию.
Зачем здесь t? Зачем так сложно? Если я правильно понял, вам нужно убрать все пробелы в строке с #inlcude <Globals.h>
Код: Выделить всё
sed '/^\s*#include\s*<Globals.h>/s/\s*//g'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 8
Re: Перенос строки в переменную
Нет, мне надо было заменить регистр букв в заголовочных файлах.
Количество пробелов я сохранял только потому, что задача и правда учебная, на практике, конечно, выписывал бы в едином виде #include <Global.sh>
t я сделал, потому что в одной строке не бывает двух include, чтобы попусту не проверялись остальные команды.
Про валидацию я так и не понял. Да, сложно проверять, а что делать?
Количество пробелов я сохранял только потому, что задача и правда учебная, на практике, конечно, выписывал бы в едином виде #include <Global.sh>
t я сделал, потому что в одной строке не бывает двух include, чтобы попусту не проверялись остальные команды.
Про валидацию я так и не понял. Да, сложно проверять, а что делать?