Jaki jest najłatwiejszy sposób dołączania tekstu do pliku w systemie Linux?
Rzuciłem okiem na to pytanie , ale zaakceptowana odpowiedź wykorzystuje dodatkowy program ( sed
) Jestem pewien, że powinien być łatwiejszy sposób z echo
lub podobnym.
Jaki jest najłatwiejszy sposób dołączania tekstu do pliku w systemie Linux?
Rzuciłem okiem na to pytanie , ale zaakceptowana odpowiedź wykorzystuje dodatkowy program ( sed
) Jestem pewien, że powinien być łatwiejszy sposób z echo
lub podobnym.
Odpowiedzi:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Zasadniczo możesz zrzucić dowolny tekst do pliku. CTRL-D wysyła sygnał końca pliku, który kończy wejście i wraca do powłoki.
sudo !!
- co powoduje wykonanie ostatniego polecenia z sudo
przedrostkiem. Niedawno dowiedziałem się, że działa to również z nano
itp. (Przez przypadkową próbę nano nano auth
...)
!!
wcześniej, super. Tak często robię takie rzeczy cat /var/log/apache/error.log
i nie otrzymuję pozwolenia. Można to również zrobić za pomocą identyfikatora z historii, np. sudo !1419
Spowoduje to wykonanie polecenia w wierszu 1419
historii jako sudo.
Co powiesz na:
echo "hello" >> <filename>
Użycie >>
operatora dopisze dane na końcu pliku, natomiast użycie >
spowoduje nadpisanie zawartości pliku, jeśli już istnieje.
Możesz też użyć printf
w ten sam sposób:
printf "hello" >> <filename>
Pamiętaj, że używanie powyższych może być niebezpieczne. Na przykład, jeśli masz już plik i musisz dołączyć dane na końcu pliku i zapomnisz dodać ostatni, >
wszystkie dane w pliku zostaną zniszczone. Możesz zmienić to zachowanie, ustawiając noclobber
zmienną w .bashrc
:
set -o noclobber
Teraz, kiedy spróbujesz to zrobić echo "hello" > file.txt
, otrzymasz ostrzeżenie cannot overwrite existing file
.
Aby wymusić zapis do pliku, musisz teraz użyć specjalnej składni:
echo "hello" >| <filename>
Powinieneś również wiedzieć, że domyślnie echo
dodaje końcowy znak nowej linii, który można pominąć za pomocą -n
flagi:
echo -n "hello" >> <filename>
Bibliografia
cat
, ale lepiej bądź ostrożny, upewniając się, że używasz >>
zamiast >
!
sudo rm -r /
=)
sudo rm -r /
niż sudo rm -rf /
! ^ _ ^ Czy jest flaga, która prosiłaby o potwierdzenie przed nadpisaniem zawartości istniejącego pliku >
? Aliasowanie tego, aby zawsze używać takiej flagi, wydaje się być dobrym pomysłem.
set -o noclobber
swój .bashrc
, ale nie możesz nadpisać istniejącego pliku bez użycia specjalnej składniecho "hello" >| <filename>
Innym możliwym sposobem jest:
echo "text" | tee -a filename >/dev/null
-a
Dołączy na końcu pliku.
W razie potrzeby sudo
użyj:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
końcu zapobiega wyświetlaniu "tekstu" w konsoli.
Kontynuuj, aby zaakceptować odpowiedź.
Jeśli używasz tego w skrypcie, potrzebujesz czegoś innego niż CTRL-D do wyznaczenia końca . Spróbuj tego zamiast tego:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Spowoduje to dołączenie tekstu do podanego pliku (z wyłączeniem „EOF”).
Wykorzystuje tutaj dokument (lub heredoc) .
Jeśli jednak potrzebujesz sudo do dołączenia do podanego pliku, napotkasz problemy z używaniem heredoc z powodu przekierowania I / O, jeśli piszesz bezpośrednio w wierszu poleceń.
Ta odmiana zadziała, gdy będziesz pisać bezpośrednio w wierszu poleceń:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Lub możesz użyć tee
zamiast tego, aby uniknąć problemu z wierszem poleceń sudo, który pojawia się podczas używania heredoc z cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
od lat i nie wiedziałem o cat << 'EOF' >>
dołączaniu! Dzięki