Cách dễ nhất để nối văn bản vào tệp trong Linux là gì?
Tôi đã xem xét câu hỏi này , nhưng câu trả lời được chấp nhận sử dụng một chương trình bổ sung ( sed
) Tôi chắc rằng sẽ có một cách dễ dàng hơn với echo
hoặc tương tự.
Cách dễ nhất để nối văn bản vào tệp trong Linux là gì?
Tôi đã xem xét câu hỏi này , nhưng câu trả lời được chấp nhận sử dụng một chương trình bổ sung ( sed
) Tôi chắc rằng sẽ có một cách dễ dàng hơn với echo
hoặc tương tự.
Câu trả lời:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Về cơ bản, bạn có thể kết xuất bất kỳ văn bản nào bạn muốn vào tệp. CTRL-D gửi tín hiệu cuối tệp, tín hiệu này kết thúc đầu vào và đưa bạn trở lại trình bao.
sudo !!
- lệnh thực thi lệnh cuối cùng với sudo
prepended. Gần đây tôi phát hiện ra điều này cũng hoạt động với nano
vv (do vô tình cố gắng nano nano auth
...)
!!
trước đây, tuyệt vời. Vì vậy, tôi thường làm những thứ như thế cat /var/log/apache/error.log
và bị từ chối cho phép. Điều này cũng có thể được thực hiện với một id từ lịch sử sudo !1419
, ví dụ , điều này sẽ thực thi lệnh tại dòng 1419
trong lịch sử là sudo.
Làm thế nào về:
echo "hello" >> <filename>
Việc sử dụng >>
toán tử sẽ nối dữ liệu vào cuối tệp, trong khi sử dụng>
sẽ ghi đè lên nội dung của tệp nếu đã tồn tại.
Bạn cũng có thể sử dụng printf
theo cách tương tự:
printf "hello" >> <filename>
Lưu ý rằng nó có thể nguy hiểm khi sử dụng những thứ trên. Ví dụ: nếu bạn đã có một tệp và bạn cần nối dữ liệu vào cuối tệp và bạn quên thêm >
dữ liệu cuối cùng trong tệp sẽ bị hủy. Bạn có thể thay đổi hành vi này bằng cách đặt noclobber
biến trong .bashrc
:
set -o noclobber
Bây giờ khi bạn cố gắng làm, echo "hello" > file.txt
bạn sẽ nhận được một cảnh báo nói rằngcannot overwrite existing file
.
Để buộc ghi vào tệp, bây giờ bạn phải sử dụng cú pháp đặc biệt:
echo "hello" >| <filename>
Bạn cũng nên biết rằng theo mặc định, echo
thêm một ký tự dòng mới ở cuối có thể bị chặn bằng cách sử dụng -n
cờ:
echo -n "hello" >> <filename>
Người giới thiệu
cat
, nhưng bạn nên cẩn thận với việc đảm bảo sử dụng >>
thay vì >
!
sudo rm -r /
=)
sudo rm -r /
hơn sudo rm -rf /
! ^ _ ^ Có cờ yêu cầu xác nhận trước khi ghi đè lên nội dung của tệp hiện có >
không? Bí danh đó để luôn sử dụng một lá cờ như vậy có vẻ như đó sẽ là một ý tưởng hay.
set -o noclobber
vào của bạn .bashrc
thì bạn không thể ghi đè lên một file đang tồn tại mà không cần sử dụng cú pháp đặc biệtecho "hello" >| <filename>
Cách khác có thể là:
echo "text" | tee -a filename >/dev/null
Di -a
chúc thêm vào cuối tệp.
Nếu cần sudo
, hãy sử dụng:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
cuối ngăn "văn bản" được hiển thị trong bảng điều khiển của bạn.
Theo dõi để trả lời được chấp nhận.
Bạn cần một cái gì đó khác ngoài CTRL-D để chỉ định phần cuối nếu sử dụng cái này trong tập lệnh . Hãy thử cái này thay thế:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Thao tác này sẽ nối văn bản vào tệp đã nêu (không bao gồm "EOF").
Nó sử dụng một tài liệu tại đây (hoặc heredoc) .
Tuy nhiên, nếu bạn cần sudo để thêm vào tệp đã nêu, bạn sẽ gặp khó khăn khi sử dụng heredoc do chuyển hướng I / O nếu bạn đang nhập trực tiếp trên dòng lệnh.
Biến thể này sẽ hoạt động khi bạn đang nhập trực tiếp trên dòng lệnh:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Hoặc bạn có thể sử dụng tee
thay thế để tránh vấn đề sudo dòng lệnh được thấy khi sử dụng heredoc với cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
trong nhiều năm và không biết về cat << 'EOF' >>
việc nối thêm! Cảm ơn