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?

użytkownik259060
źródło
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.

Faron
źródło
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
Stormvirux
źródło
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
rafaelbattesti
źródło
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ę.
ignis
źródło
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.

użytkownik259060
źródło