Jak mogę dodać tekst do pliku przed konkretnym słowem z linii poleceń Linuksa?

2

Obecnie piszę skrypt, który automatycznie zmienia plik konfiguracyjny, w szczególności chcę umieścić „vfio vfio_iommu_type1 vfio_pci vfio_virqfd” (bez cudzysłowów) między nawiasami w MODULES = (). Chciałbym także wiedzieć, jak mogę go później usunąć z linii poleceń. MODULES znajduje się w pliku /etc/mkinitcpio.conf i jest w linii 7.

Sol33t303
źródło

Odpowiedzi:

1

Lepiej podać nam przykład pliku /etc/mkinitcpio.conf.

Możesz użyć następującego polecenia, aby zmienić plik, zakładając, że istnieje tylko jedna instancja: ()

sed -i 's/()/(vfio vfio_iommu_type1 vfio_pci vfio_virqfd)/g' /etc/mkinitcpio.conf

Aby go zmienić, wykonaj odwrotnie:

sed -i 's/(vfio vfio_iommu_type1 vfio_pci vfio_virqfd)/()/g' /etc/mkinitcpio.conf

Zakładając, że istnieje wiele jego wystąpień, możesz wykonać następujące czynności:

sed -i '7s/MODULES=\(\)/MODULES=(vfio vfio_iommu_type1 vfio_pci vfio_virqfd)/ /etc/mkinitcpio.conf

7 to numer linii, w której pojawi się instancja, którą chcesz zmienić.

Nasir Riley
źródło
Dziękuję za informację, ale kiedy próbuję użyć polecenia bottom (ponieważ kiedy robię to pierwsze, robi to samo dla każdego wiersza tekstu z () na końcu), mówi, że jest błąd składniowy w pobliżu nieoczekiwanego tokena „(”.
Sol33t303
Odpowiedź została edytowana.
Nasir Riley
0

Możesz użyć polecenia sed, które jest preinstalowane na Linuksie.

sed -i -e 's / MYWORD / HELLO Z MYWORD / g' myscript.sh

Więcej przykładów: wprowadź opis linku tutaj

kappatech
źródło
0

Zastąp używając:

sed -i 's/MODULES=\(\)/MODULES=(vfio vfio_iommu_type1 vfio_pci vfio_virqfd)/g' /etc/mkinitcpio.conf

I powróć z:

sed -i 's/MODULES=\(vfio vfio_iommu_type1 vfio_pci vfio_virqfd\)/MODULES=()/g' /etc/mkinitcpio.conf
Gohu
źródło