LINUX.ORG.RU

Sed не работает в bash-скриптах

 ,


0

2

Имеется один файл. Мне нужно заменить там сразу несколько слов/словосочетаний (точнее создать новый изменённый файл, старый оставить) . Когда я в bash ввожу (к примеру):

sed -e 's/Welcome back/С возвращением/g' index.txt > index_new.txt
всё работает. Но если я создаю bash-скрипт с сразу несколькими подобными команадми, то он, почему-то, копирует содержимое старого файла, ничего не изменяя. Причём никаких ошибок он мне не выдаёт. С чем связано такое странное поведение и как это решить??


Ответ на: комментарий от Deleted

Там кроме sedов абсолютно ничего нет, все ошибки, из-за которых работа скрипта вообще прерывалась, я успешно исправил. Кстати я нашел забавный факт: если всё содержимое скрипта тупо скопировать в терминал, то происходит то же самое, но если вводить по отдельности, то всё выходит.

VinZ02
() автор топика
Ответ на: комментарий от Deleted

Ну вот, держи мой говнокод:) На саму суть этого скрипта лучше не обращай внимания))

sed -e 's/Welcome back/С возвращением/g' index.html > index_new.html
sed -e 's/User/Пользователь/g' index.html > index_new.html
sed -e 's/Password/Пароль/g' index.html > index_new.html
sed -e 's/Incorrect Password/Хех, парольчик-то неверный/g' index.html > index_new.html
sed -e 's/Session/Графическая оболочка/g' index.html > index_new.html
sed -e 's/Sign in/Войти/g' index.html > index_new.html
sed -e 's/Signing in/Вхожу и проверяю пароль/g' index.html > index_new.html
sed -e 's/Settings/Настройки/g' index.html > index_new.html
sed -e 's/Language/Язык/g' index.html > index_new.html
sed -e 's/Background Engine/Фон/g' index.html > index_new.html
sed -e 's/Trianglify/"Trianglify"/g' index.html > index_new.html
sed -e 's/Particleground/"Particleground"/g' index.html > index_new.html
sed -e 's/Random Image/Случайное изображение/g' index.html > index_new.html
sed -e 's/Image/Изображение/g' index.html > index_new.html
sed -e 's%Background images should be located in "/var/lib/AccountsService/wallpapers" in png or jpeg format%Изображения для фона должны находиться в "/var/lib/AccountsService/wallpapers" в png или jpeg формате%g' index.html > index_new.html
sed -e 's%Background image should be located at "/var/lib/AccountsService/wallpapers/lightdm-webkit.jpg" in jpeg format%Изображение для фона должно находиться "/var/lib/AccountsService/wallpapers/lightdm-webkit.jpg" в jpeg формате%g' index.html > index_new.html
sed -e 's/Density/Плотность/g' index.html > index_new.html
sed -e 's/ more / больше /g' index.html > index_new.html
sed -e 's/ less)/ меньше)/g' index.html > index_new.html
sed -e 's/Particle density should be between 5000 and 100000/Плотность частиц должна быть в пределах от 5000 до 100000/g' index.html > index_new.html
sed -e 's/Background Color Scheme/Настройка фонового цвета/g' index.html > index_new.html
sed -e 's/Random (default)/Случайный (по умолчанию)/g' index.html > index_new.html
sed -e 's/"One-color"/"Один цвет"/g' index.html > index_new.html
sed -e 's/>Blue</>Синий</g' index.html > index_new.html
sed -e 's/>Purple</>Розовый</g' index.html > index_new.html
sed -e 's/>Orange</>Оранжевый</g' index.html > index_new.html
sed -e 's/>Red</>Красный</g' index.html > index_new.html
sed -e 's/"Multiple Colours"/"Много цветов"/g' index.html > index_new.html
sed -e 's/Yellow-Orange-Red/Жёлто-Оранжево-Красный/g' index.html > index_new.html
sed -e 's/Yellow-Green-Blue/Жёлто-Зелёно-Синий/g' index.html > index_new.html
sed -e 's/Purple-Orange/Розово-Оранжевый/g' index.html > index_new.html
sed -e 's/Yellow-Orange-Brown/Жёлто-Оранжево-Коричневый/g' index.html > index_new.html
sed -e 's/Clock Format/Формат часов/g' index.html > index_new.html
sed -e 's/24-hour/24-часовой/g' index.html > index_new.html
sed -e 's/12-hour/12-часовой/g' index.html > index_new.html
sed -e 's/Animation/Анимация/g' index.html > index_new.html
sed -e 's/Animation Duration/Продолжительность анимации/g' index.html > index_new.html
sed -e 's/(milliseconds)/(в миллисекундах)/g' index.html > index_new.html
sed -e 's/Animation duration should be between 0 and 5000/Продолжительность анимации должна быть в пределах от 0 до 5000/g' index.html > index_new.html
sed -e 's/> Done/> Сохранить/g' index.html > index_new.html
sed -e 's/>Shutdown</>Выключение</g' index.html > index_new.html
sed -e 's/>Reboot</>Перезагрузка</g' index.html > index_new.html
sed -e 's/>Suspend</>Спящий режим</g' index.html > index_new.html
sed -e 's/>Hibernate</>Спящий режим</g' index.html > index_new.html
sed -e 's/ Cancel/ Ой, нет/g' index.html > index_new.html
sed -e 's/Do you really want to shutdown?/Вы что, действительно хотите выключить компьютер? :(/g' index.html > index_new.html
sed -e 's/i> Shutdown</> Конечно</g' index.html > index_new.html
sed -e 's/Do you really want to restart?/Вы действительно хотите перезагрузить компьютер?/g' index.html > index_new.html
sed -e 's/i> Restart</> Конечно</g' index.html > index_new.html
sed -e 's/Do you really want to suspend?/Вы действительно хотите перейти в ждущий режим?/g' index.html > index_new.html
sed -e 's/i> Suspend</> Конечно</g' index.html > index_new.html
sed -e 's/Do you really want to hibernate?/Вы действительно хотите усыпить ваш компьютер?/g' index.html > index_new.html
sed -e 's/i> Hibernate</> Конечно</g' index.html > index_new.html
sed -e 's/>Help</>Помощь</g' index.html > index_new.html
sed -e 's%I found a bug/mistake? Where can I report it?%Я нашёл баг/ошибку. Где я могу об этом сообщить? (Перевод не считается))%g' index.html > index_new.html
sed -e 's/Setting a profile icon/Настроить аватар/g' index.html > index_new.html
sed -e 's/>Crafted with/>Сделано с/g' index.html > index_new.html
sed -e 's/in Poland and the USA./в Польше и в США. Ах, да-да, ещё в России))/g' index.html  > index_new.html

VinZ02
() автор топика
Ответ на: комментарий от Deleted

На самом деле, скрипт был больше (там был не только sed конечно)), но так как скрипт не работал, я решил оставить для отладки только sed, и выяснил, что как раз где-то здесь проблема

VinZ02
() автор топика

Телепаты прибыли

У тебя там несколько команд одинаковых с sed. В одной из них ты просто копируешь исходный файл в результирующий без изменений.

Готово. Ставь галочку «Решено» в первом посте.

justAmoment ★★★★★
()
Ответ на: комментарий от VinZ02

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

Сделай тогда уж так

#!/bin/bash
cp index.html index_new.html
sed -i -e "blabla" index_new.html
sed -i -e "blabla2" index_new.html
...

И вообще это все можно одной командой сделать: sed -e «blabla» -e «blabla2» и так далее, но выглядеть будет ужасно.

Deleted
()
Ответ на: Телепаты прибыли от justAmoment

У меня таких там только две, и то с прибавлением кавычек:)

VinZ02
() автор топика
Ответ на: комментарий от anonymous

Интересно, а какой длины этого составного выражения выдержит sed? Или возьмёт первые 1024 символа, а остальное откинет?

justAmoment ★★★★★
()
Ответ на: комментарий от VinZ02

А еще можно всю эту хрень записать в файл такого вида:

s/Welcome back/С возвращением/g
s/Password/Пароль/g
s/Incorrect Password/Хех, парольчик-то неверный/g
s/Session/Графическая оболочка/g
s/Sign in/Войти/g
s/Signing in/Вхожу и проверяю пароль/gindex_new.html
s/Settings/Настройки/g
...
и запускать так: sed -f этот_файл index.html > index_new.html

anonymous
()
6 августа 2016 г.
Ответ на: комментарий от VinZ02

Но в юниксовом sed это не работает, чисто гнутая фича.

das_tier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.