Dodaj słowa do pliku tekstowego za pomocą pojedynczego polecenia terminala (bez edytorów)


22

Jestem nowy w Linuksie. Muszę edytować .confplik tylko z otwartego terminalu i nie używając żadnych edytorów tekstu. Czy mogę dodawać słowa i zdania do pliku konfiguracyjnego z otwartego terminalu?

Przykład: command /home/.../file.conf -add 'abcd'do 23. linii i tak dalej. I wreszcie zapisz to.

Czy można wyszukać określone słowo w tym pliku konfiguracyjnym i dodać nowy tekst do następnego wiersza tego pliku konfiguracyjnego, używając tylko polecenia?


1
Wygląda na to, że sedmoże przyjść pomóc.
nitishch

1
Zadaj jedno pytanie.
Avinash Raj

Odpowiedzi:


39

Zwykle robię to w ten sposób, gdy programuję skrypt, aby robił to samo, o co prosisz, ale programowo.

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

Voila! Masz to. Ważna uwaga >>oznacza dodanie nowej linii do istniejącego pliku, tymczasem >po prostu nadpisuj wszystko.


Dziękuję za szybką odpowiedź. Ale muszę dodać ponad 3000 słów do 23 wiersza mojego pliku .conf po kolei. Czy jest jakiś łatwiejszy sposób?
user259060

20

Dodanie słów i zdań do pliku konfiguracyjnego z otwartego terminalu można łatwo osiągnąć za pomocą sed.

sed -i '23iabcd' file.conf

wstawia tekst w wierszu 23 abcddo plikufile.conf

-idokonuje modyfikacji bezpośrednio do pliku file.conf.

Jeśli chcesz użyć, awkto:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

Poniższy dodaje jeden wiersz po SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Wstawia nowy tekst o jeden wiersz poniżej każdego wiersza zawierającego SearchPattern.

Aby dodać dwie linie, możesz użyć a \i wprowadzić nową linię podczas wpisywania nowego tekstu.

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

Możesz także użyć printfpolecenia.

Aby dodać linie do pliku

$ printf "\nThis is a new line to your document" >> file.txt

Aby zastąpić plik

$ printf "This overwrites your file" > file.txt

0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Uwagi:

  • regex jest wyrażeniem regularnym (znanym również jako regex), definiuje kryteria wyszukiwania. Wyrażenia regularne umożliwiają wyszukiwanie, które można bardzo dostosować, a składnia rozumiana przez awk znajduje się w podręczniku . W najprostszym przypadku - wyszukaj ciąg „tak, jak jest”, znak po znaku - po prostu umieść odwrotny ukośnik przed znakami specjalnymi (lista znaków specjalnych znajduje się w instrukcji obsługi)

Jak to działa:

  • otwórz, inputfileaby odczytać linie wejściowe, wyczyść outputfilei otwórz, aby zapisać linie wyjściowe
  • dla każdej linii uruchom blok w nawiasach klamrowych:
    • jeśli linia pasuje do wyrażenia regularnego, wyślij linię z dołączoną zawartością
    • w przeciwnym razie wypisz tę samą linię.

0

Znalazłem rozwiązanie mojego pytania za pomocą edpolecenia

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

Tekst może zawierać 27 wierszy. Możesz skopiować 27 linii z pliku tekstowego i wkleić 27 linii do pliku konfiguracyjnego. Ale muszę uruchomić edpolecenie jednocześnie, aby dodać więcej tekstu do tego samego pliku konfiguracyjnego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.