2015-06-11 2 views
0

Мне нужно заменить строку из файла с помощью сценария оболочки.Заменить строку в файле с помощью сценария оболочки

Файл:

# cat /root/sge_scripts/night_sched_conf 
algorithm default 
schedule_interval 0:0:05 
maxujobs 12 
queue_sort_method seqno 

Я хочу заменить третью строчку (после maxujobs) значением генерируемого в сценарии.

Вот что я сделал до сих пор:

#!/bin/sh 
export SGE_ROOT=/opt/sge 
source=/opt/sge/defalt/common/settings.sh 
delete=1 
total=`qstat -u "*" | awk ' { print $4 } ' | sort | uniq | wc -l` 
total_users=$((total - delete)) 

case $total_users in 

1) range=18;; 
2) range=9 ;; 
3) range=7 ;; 
4) range=6 ;; 
5) range=5 ;; 
6) range=4 ;; 
7) range=3 ;; 
8) range=3 ;; 
9) range=2 ;; 
10) range=2 ;; 
11) range=2 ;; 
12) range=2 ;; 
13) range=1 ;; 
14) range=1 ;; 
15) range=1 ;; 
16) range=1 ;; 
18) range=1 ;; 
19) range=1 ;; 
20) range=1 ;; 
21) range=1 ;; 
22) range=1 ;; 
23) range=1 ;; 
24) range=1 ;; 
25) range=1 ;; 
26) range=1 ;; 
27) range=1 ;; 
28) range=1 ;; 
29) range=1 ;; 
30) range=1 ;; 
31) range=1 ;; 
32) range=1 ;; 
33) range=1 ;; 
34) range=1 ;; 
*) echo "INVALID NUMBER!" ;; 
esac 

current=`cat /root/sge_scripts/night_sched_conf | awk ' /maxujobs/ { print $2 } '` 
if [ "$range" != "$current" ] 
then 
    sed -i '3s/.*/maxujobs   "$range"/' /root/sge_scripts/night_sched_conf 
fi 
+0

и в проблема в том, что вы получаете '' $ range «вместо числа? Оболочка не расширяет элементы внутри одинарных кавычек, что хорошо. Это означает, что вам нужно быть осторожным. Вероятно, '' 3s /.*/ maxujobs '' $ range/"' (что является единственным аргументом, даже первая часть находится в одинарных кавычках, а вторая - в двойных кавычках). –

ответ

0

Да, есть способ сделать это .Есть команда в Linux называется sed редактор потока, который используется для редактирования файлов сценариев оболочки, как обновить строку или заменить строку может быть сделано в this.You может следовать ниже ссылке и попытаться replace.Try его с этой командой, и дайте мне знать, если вы столкнулись любые проблемы

Reference

+1

Мое впечатление, что они знают о 'sed'; они показывают, что они используются в нижней части скрипта. Понятно, что они должны быть способны делать лучше, чем аргумент case, но это совершенно другой аргумент. –

+0

Спасибо, но я хочу, чтобы значение диапазона tp проходило до sed, как sed -i '3s /.*/ maxujobs "$ range" /'/root/sge_scripts/night_sched_conf – sagar

+0

Можете ли вы показать нам точные изменения файлов, чтобы я мог лучше помочь это если его не сделано .. – gks

Смежные вопросы