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 echolub 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 echolub 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 sudoprzedrostkiem. Niedawno dowiedziałem się, że działa to również z nanoitp. (Przez przypadkową próbę nano nano auth...)
!!wcześniej, super. Tak często robię takie rzeczy cat /var/log/apache/error.logi nie otrzymuję pozwolenia. Można to również zrobić za pomocą identyfikatora z historii, np. sudo !1419Spowoduje to wykonanie polecenia w wierszu 1419historii 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ć printfw 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 noclobberzmienną 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 echododaje końcowy znak nowej linii, który można pominąć za pomocą -nflagi:
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 noclobberswó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
-aDołączy na końcu pliku.
W razie potrzeby sudoużyj:
echo "text" | sudo tee -a filename >/dev/null
>/dev/nullkoń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ć teezamiast 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