Ktoṡ wie, jak to zrobiċ?
Dokładnie tak samo, tylko używając wyrażenia regularnego:
sed 's/^last_sent *=.*$/last_sent = 2015-11-12_10:45/' /home/motion/variables.txt
Pamiętaj tylko przy wyrażeniu regularnym o ^ (i dla formalnoṡci $), aby łapaċ całą linię.
W przeciwnym wypadku sed dopasuje zmienne *kończące się* w podany sposób, a nie dokładnie o takiej nazwie.
Może przydać ci się też parametr -i polecenia sed: man sed
- otwierania pliku,
Linia po linii:
while read -r line; do
echo $line
done < plik.txt
- wyszukiwania linii zawierającej frazę np: "last_sent = "
Jak wyżej, dodając w pętli warunek z wyrażeniem regularnym:
REGEXP='^last_sent *= *(.*)$'
if [[ "$line" =~ $REGEXP ]]; then
...
fi
- odczytu tego co stoi za taką frazą
Powyższy warunek pozwoli odczytać wybrane fragmenty z tablicy BASH_REMATCH:
echo "${BASH_REMATCH[1]}"
- zapisu za taką frazą
Jak w poprzednim poście, z użyciem sed.
Albo możesz na bieżąco w pętli wypluwać nową zawartość pliku linia po linii do bufora, zmieniając niektóre linie, a na koniec wypchnąć bufor do pliku: