Проблема Sed в скрипте Bash

Во-первых, я думаю, что это отличное предложение, и определенно то, что TestDrive мог / должен поддерживать!

. Тем временем вы можете захватить изображение UEC, развернуть его и запустить в KVM:

wget http://uec-images.ubuntu.com/natty/current/natty-server-uec-amd64.tar.gz
tar zxvf *.tar.gz
kvm -boot a -fda natty-server-uec-amd64-floppy -drive file=natty-server-uec-amd64.img,if=virtio -curses

Наслаждайтесь!

2
задан 3 March 2011 в 20:09

11 ответов

Есть несколько проблем с этим фрагментом. Я рекомендую вам изучить синтаксис bash немного лучше, прежде чем писать сценарии в нем.

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

#!/bin/bash

read -p "Enter the ip address: " ipnumber

ed -s application.properties << EOF
/:@/c
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz
.
w
EOF

Что говорит этот сценарий: /:@/c - в первой строке, содержащей :@, измените строку со всем, что осталось до тех пор, пока строка, содержащая только a .. Затем w, чтобы записать изменения в файл.

См. Http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed для справки по редактированию с использованием ed, и http://mywiki.wooledge.org/BashGuide, чтобы узнать bash.

Обновление: sed можно использовать для достижения того же, но он не может редактировать файлы, его можно использовать только для создания новый файл.

# POSIX
sed "/:@/c\
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties

Здесь sed выведет файл с внесенными изменениями. Вы можете перенаправить на новый файл, а затем переместить этот файл поверх старого. GNU sed также имеет нестандартную опцию -i, которая делает последнюю часть прозрачной. GNU sed также не требует, чтобы у вас была эта новая строка в скрипте sed.

# GNU sed
sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties

Обратите внимание, что ed будет заменять только первую строку, соответствующую регулярному выражению, в то время как sed заменит все строки, соответствующие этому регулярному выражению .

6
ответ дан 25 May 2018 в 22:44
  • 1
    вы гений ..... Спасибо человеку Спасибо, есть способ использовать sed ?? – moata_u 3 March 2011 в 12:20
  • 2
    @moata_u да, я обновил ответ, чтобы объяснить, как это сделать с sed. – geirha 3 March 2011 в 12:35

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

#!/bin/bash read -p "Please Enter The ip address : " ipnum find=`grep ":@" application.properties` test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e" sed -i "s/"$find"/"$test"/g" application.properties

THANKS geirha

6
ответ дан 26 July 2018 в 21:18

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

#!/bin/bash read -p "Please Enter The ip address : " ipnum find=`grep ":@" application.properties` test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e" sed -i "s/"$find"/"$test"/g" application.properties

THANKS geirha

6
ответ дан 2 August 2018 в 03:51

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

#!/bin/bash read -p "Please Enter The ip address : " ipnum find=`grep ":@" application.properties` test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e" sed -i "s/"$find"/"$test"/g" application.properties

THANKS geirha

6
ответ дан 4 August 2018 в 19:55

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

  #! / bin / bash read -p "Пожалуйста, введите  ip address: "ipnum find =` grep ": @" application.properties` test = "connection.url = jdbc: oracle: thin: @ $ ipnum: 1521: e" sed -i "s /" $ find "/"  $ test "/ g" application.properties  

THANKS geirha


6
ответ дан 6 August 2018 в 03:57

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

  #! / bin / bash read -p "Пожалуйста, введите  ip address: "ipnum find =` grep ": @" application.properties` test = "connection.url = jdbc: oracle: thin: @ $ ipnum: 1521: e" sed -i "s /" $ find "/"  $ test "/ g" application.properties  

THANKS geirha


6
ответ дан 7 August 2018 в 21:55

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

  #! / bin / bash read -p "Пожалуйста, введите  ip address: "ipnum find =` grep ": @" application.properties` test = "connection.url = jdbc: oracle: thin: @ $ ipnum: 1521: e" sed -i "s /" $ find "/"  $ test "/ g" application.properties  

THANKS geirha


6
ответ дан 10 August 2018 в 10:10

Есть несколько проблем с этим фрагментом. Я рекомендую вам изучить синтаксис bash немного лучше, прежде чем писать сценарии в нем.

В любом случае, если вы хотите отредактировать файл, вам нужен редактор файлов. sed не является файловым редактором. Я думаю, что это сделает то, что вы хотите.

  #! / Bin / bash read -p "Введите IP-адрес:" ipnumber ed -s application.properties & lt; & lt;  EOF /: @ / c connection.url = jdbc: oracle: thin: @ $ ipnumber: 1521: billz.  w EOF  

Что говорит этот сценарий: /: @ / c - в первой строке, содержащей : @ , c помещают строку со всем, что следует до строки, содержащей только . . Затем w to w обмениваем изменения в файле.

См. [D0] http://wiki.bash-hackers.org/doku. php? id = howto: edit-ed для справки по редактированию с помощью ed и http://mywiki.wooledge.org/BashGuide , чтобы узнать bash.

Обновление: sed можно использовать для достижения того же самого, но он не может редактировать файлы, его можно использовать только для создания нового файла.

  # POSIX sed "/: @ / c \  connection.url = jdbc: oracle: thin: @ $ ipnumber: 1521: billz "application.properties  

Здесь sed выведет файл с внесенными изменениями. Вы можете перенаправить на новый файл, а затем переместить этот файл поверх старого. GNU sed также имеет нестандартную опцию -i , которая делает последнюю часть прозрачно. GNU sed также не требует, чтобы у вас была эта строка в сценарии sed.

  # GNU sed sed -i "/: @ / c connection.url = jdbc: oracle: thin: @  $ ipnumber: 1521: billz "application.properties  

Обратите внимание, что ed будет заменять только строку first , которая соответствует регулярному выражению, в то время как sed заменит все , соответствующие этому регулярному выражению.

6
ответ дан 12 August 2018 в 11:56
  • 1
    вы гений ..... Спасибо человеку Спасибо, есть способ использовать sed ?? – moata_u 3 March 2011 в 12:20
  • 2
    @moata_u да, я обновил ответ, чтобы объяснить, как это сделать с sed. – geirha 3 March 2011 в 12:35

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

#!/bin/bash

read -p "Please Enter The ip address : " ipnum 
find=`grep ":@" application.properties`
test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e"
sed -i "s/"$find"/"$test"/g" application.properties

THANKS geirha

-1
ответ дан 25 May 2018 в 22:44
  • 1
    Вы не использовали никаких зарезервированных имен переменных в своем исходном коде, у вас просто не было синтаксиса оболочки и sed. Опять же, я рекомендую прочитать руководство по bash, на которое я ссылался в своем ответе. Вы по-прежнему используете кавычки неправильно, и он может не работать, если переменная find содержит пробелы, синтаксис glob, синтаксис регулярных выражений или косые черты. – geirha 3 March 2011 в 19:57

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

#!/bin/bash read -p "Please Enter The ip address : " ipnum find=`grep ":@" application.properties` test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e" sed -i "s/"$find"/"$test"/g" application.properties

THANKS geirha

-1
ответ дан 25 July 2018 в 22:24
  • 1
    вы гений ..... Спасибо человеку Спасибо, есть способ использовать sed ?? – moata_u 3 March 2011 в 12:20
  • 2
    @moata_u да, я обновил ответ, чтобы объяснить, как это сделать с sed. – geirha 3 March 2011 в 12:35
  • 3
    Вы не использовали никаких зарезервированных имен переменных в своем исходном коде, у вас просто не было синтаксиса оболочки и sed. Опять же, я рекомендую прочитать руководство по bash, на которое я ссылался в своем ответе. Вы по-прежнему используете кавычки неправильно, и он может не работать, если переменная find содержит пробелы, синтаксис glob, синтаксис регулярных выражений или косые черты. – geirha 3 March 2011 в 19:57

моя проблема была: я использовал имя переменной (значение) ,, которое зарезервировано :)) Решение:

  #! / bin / bash read -p "Пожалуйста, введите  ip address: "ipnum find =` grep ": @" application.properties` test = "connection.url = jdbc: oracle: thin: @ $ ipnum: 1521: e" sed -i "s /" $ find "/"  $ test "/ g" application.properties  

THANKS geirha


-1
ответ дан 13 August 2018 в 16:31
  • 1
    Вы не использовали никаких зарезервированных имен переменных в своем исходном коде, у вас просто не было синтаксиса оболочки и sed. Опять же, я рекомендую прочитать руководство по bash, на которое я ссылался в своем ответе. Вы по-прежнему используете кавычки неправильно, и он может не работать, если переменная find содержит пробелы, синтаксис glob, синтаксис регулярных выражений или косые черты. – geirha 3 March 2011 в 19:57

Другие вопросы по тегам:

Похожие вопросы: