[+] Bash, dopisanie znaku na pocz

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2341
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

[+] Bash, dopisanie znaku na początku linii zawierającej ciąg znaków

Post autor: LordRuthwen »

W jaki sposób można dopisać znak # na początku linii zawierającej zadaną frazę?
Dopisanie # na poczśtku każdej linii nie jest trudne, bo wystarczy coś takiego:

Kod: Zaznacz cały

sed 's/^/#/g'
natomiast mnie interesują tylko te linie, które zawierają ciągi znaków zawartych w pliku, niech będzie /home/lista
Teraz pytanie jak to można rozwiązać?
Próbowałem ten sposób:

Kod: Zaznacz cały

exec 3<&0
exec 0</home/lista
while read line
do
grep $line plik | sed 's/^/#/g'
done
exec 0<&3
Ale efekt jest oczywisty i nie działa jak trzeba.

Dodane:
Doszedłem do czegoś takiego:

Kod: Zaznacz cały

#!/bin/bash
exec 3<&0
exec 0</home/lista
while read line
do
a=`grep $line /etc/arp/oki2 |tail -n 1 | sed 's/^/#/g'`
echo "A: " $a
echo "line: " $line
sed -i "s/$line/$a/g" /etc/arp/oki2
done
exec 0<&3
ale coś tam dalej nie działa, plik lista:

Kod: Zaznacz cały

kot
ala
plik przed edycja:

Kod: Zaznacz cały

ala ma kota
kot to nie pies
kot ma ale
ala to baba
ale tu nie ma nic
plik po edycji:

Kod: Zaznacz cały

#ala to baba ma #kot ma alea
#kot ma ale to nie pies
#kot ma ale ma ale
#ala to baba to baba
ale tu nie ma nic
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

A awku to bym to zrobił tak:

Kod: Zaznacz cały

awk '$0 != ""  { print "#"$0}'  plik
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2341
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

Zmajstrowałem coś takiego:

Kod: Zaznacz cały

#!/bin/bash
exec 3<&0
exec 0</home/lista
while read line
do
a=`grep "$line" /etc/arp/oki2 |wc -l`
for (( c=1; c<=$a; c++))
do
b=`grep $line /etc/arp/oki2 | head -n $c | tail -n 1`
d=`grep $line /etc/arp/oki2 | head -n $c | tail -n 1 | sed 's/^/#/g'`
sed -i "s/$b/$d/g" /etc/arp/oki2
done
done
exec 0<&3
Może dookoła, ale działa i robi to co ma robić :)
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Nawet bardzo dookoła, bo jesli Cię dobrze zrozumiałem to mój sposób załatwiłby sprawę.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2341
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

Wyjaśnij mi proszę na jakiej zasadzie twoje rozwiązanie działa.
ODPOWIEDZ