BASH добавить в строку - PullRequest
2 голосов
/ 13 июля 2009

Я хочу написать код, добавляемый в строку для открытого файла inittab и добавить

c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
<<~~~ i want add code here 

# Local serial lines:
#s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100
#s2:12345:respawn:/sbin/agetty -L ttyS1 9600 vt100

Есть ли способ сделать это в Bash?

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Вот альтернатива сценарию wazoox с использованием встроенного фрагмента awk (я добавил init -q из wazoox)

#!/bin/bash

my_file=/etc/inittab
my_pattern="c6:12345:respawn:.* 38400 tty6 linux"

awk -f - ${my_file}<<__END__
{ print }
/${my_pattern}/ { 
    print "any code you want to add" 
}
__END__

init -q

Просто отметьте шаблон, который вы хотите обнаружить, и используйте «man awk» для использования печати. Если у вас есть большой кусок кода для добавления, вы можете использовать $(cat ${my_code_file}) во фрагменте awk.

0 голосов
/ 13 июля 2009

в одну сторону

# awk '/^# Local serial lines/{ print "I wanna add code here\n"}1' /etc/inittab > temp
# mv temp /etc/inittab

затем выполните init -q, как говорит wazoox.

другой способ: отредактируйте ваш inittab вручную, если он только один раз.

0 голосов
/ 13 июля 2009

Измените ваш inittab, затем "init -q", чтобы перезагрузить его. Если ваш вопрос касается редактирования файла в bash, вы можете прочитать файл и переписать его в цикле следующим образом:

for i in `cat thefile`
do
   echo $i >> someOtherFile
   if [ "some condition" == "some condition" ];
       then
       # do something else
   fi
done

Это будет читать строку «thefile» построчно и записывать в «someOtherFile», позволяя вам вставить любой тест для добавления строк в поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...