วิธีที่เร็วที่สุดในการเพิ่มข้อความไปยังไฟล์จากบรรทัดคำสั่งคืออะไร


29

บางครั้งฉันมีความคิดว่าฉันต้องการเขียนลงในไฟล์ขณะที่ฉันอยู่ที่สถานี ฉันต้องการให้โน้ตเหล่านี้ทั้งหมดอยู่ในไฟล์เดียวกันโดยจะแสดงไว้ทีละรายการ ฉันต้องการแท็กวันที่ / เวลาในแต่ละรายการด้วย

เป็นไปได้ไหมที่จะทำได้โดยไม่ต้องเปิดไฟล์ในแต่ละครั้ง? ฉันสามารถป้อนมันลงในเทอร์มินัลแล้วต่อท้ายไฟล์ด้วยคำสั่งหรือสคริปต์ได้หรือไม่?

ฉันใช้ GNU BASH

คำตอบ:


25

เขียนเชลล์สคริปต์ที่ชื่อ "n" ด้วยตัวคุณเอง ใส่สิ่งนี้ลงไป:

#!/bin/sh
notefile=/home/me/notefile
date >> $notefile
emacs $notefile -f end-of-buffer

ฉันแนะนำสิ่งนี้แทนcat >> notefileเพราะ:

  1. วันหนึ่งคุณจะต้องรีบหา >> และพิมพ์ >> แทนแล้วปล่อยแฟ้มของคุณออกไป
  2. Emacs เริ่มในห้าร้อยในห้าวินาทีใน Mac Mini ของฉัน ใช้เวลาประมาณสิบวินาทีในการเริ่มทำงานบนระบบที่ใช้ Celeron ซึ่งมีอายุสิบปีซึ่งฉันนั่งอยู่รอบ ๆ หากคุณรอไม่นานนักที่จะเริ่มพิมพ์คุณก็เป็นเครื่องจักรอยู่แล้วและไม่จำเป็นต้องจดบันทึก :)

หากคุณยืนยันที่จะหลีกเลี่ยงเท็กซ์เอดิเตอร์ให้ใช้ฟังก์ชันเชลล์:

n () { date >> /home/me/notefile; cat >> /home/me/notefile; }

ซึ่งควรทำงานกับเชลล์ทั้งหมดที่อ้างถึงความเข้ากันได้ของเชลล์เป้าหมาย


1
วิธีการที่ไม่nฟังก์ชั่นการเขียนไปยังไฟล์หรือไม่ คุณไม่ได้หมายถึงบางสิ่งบางอย่างecho "$*"มากกว่าUUOCใช่ไหม มันรวมแท็กวันที่ / เวลาอย่างไร
jasonwryan

1
ไม่ไร้ประโยชน์เลยทีเดียว มันอ่านจาก stdin ซึ่งเป็นที่ที่ผู้ใช้จะพิมพ์บันทึกย่อของพวกเขา แต่ฉันก็ลืม datestamp ไปแล้ว
Kyle Jones

ผมไม่จำเป็นต้องเห็นด้วยเกี่ยวกับ UUOC แต่คุณมีคุณชี้กลับมาวันที่ ...
jasonwryan

5
+1 การเข้ารหัสที่ดีและเหตุผลกับการพิมพ์ผิดหลีกเลี่ยงไม่ได้
msw

2
ไคล์คุณเห็นได้ชัดไม่ได้มี .emacs.d90MB ใช่ฉันต้องทำความสะอาด
quodlibetor

18

นอกจากนี้หากต้องการเขียนหลายบรรทัดไปยังไฟล์จากบรรทัดคำสั่งให้ทำ:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF

หรือcat > sometextfile.txt << EOFเพื่อเขียนทับไฟล์ที่มีอยู่
mbomb007

10

เพียงใช้echo:

echo $(date) Hi. >> notes.txt

คุณสามารถใช้ >> เพื่อต่อท้ายไฟล์หรือใช้> เพื่อเขียนทับมัน



2

หากคุณติดตั้งทับทิมบนคอมพิวเตอร์ของคุณคุณสามารถใช้https://github.com/minhajuddin/taskr วิธีนี้ทำให้คุณได้มุมมองที่ดีของบันทึกย่อพร้อมแท็กและเวลาที่ผ่านไป

ภาพหน้าจอของ Taskr


ภาพหน้าจอดูดีมาก ๆ แต่ถ้าคุณทำได้มันจะดีกว่ามากถ้าคุณใช้ copy-paste
เตอร์กล่าวคืนสถานะโมนิก้า

1

ขึ้นอยู่กับความต้องการของคุณ syslogd อาจเป็นอีกเครื่องมือหนึ่งในการอ่าน คำสั่ง

theuser@tetrad:~$ logger This message is sent to syslog

จะบันทึกข้อความด้วยสิ่งอำนวยความสะดวก user.notice ด้วยระบบ Linux หลายตัวการทำเช่นนี้จะเพียงพอที่จะเปิดไฟล์ /var/log/user.log และผนวกเข้ากับระบบอื่น ๆ คุณอาจต้องกำหนดการจัดการสำหรับสถานที่นั้นและระดับการบันทึก (หรือสิ่งอำนวยความสะดวกที่คุณเลือก - local0 ไปยังสิ่งอำนวยความสะดวก local7 มักจะฟรีให้กับสิ่งต่าง ๆ

มีประโยชน์ที่จะสามารถส่งการบันทึกจากเครื่องลูกข่ายไปยังเซิร์ฟเวอร์การเข้าสู่ระบบกลางซึ่งเป็นสิ่งที่ฉันชอบใช้ในการติดตามการดำเนินการของผู้ดูแลระบบเพราะมันจะบันทึกเวลาผู้ใช้และข้อมูลโฮสต์โดยอัตโนมัติในขณะที่ดำเนินการตามลำดับ .

ผลลัพธ์ที่ได้ในไฟล์ท้องถิ่น:

theuser@tetrad:~$ tail /var/log/user.log
Jan 31 07:18:37 tetrad theuser: This message is sent to syslog

ตัวอย่างสำหรับบรรทัดการกำหนดค่า syslog บนSolaris :

local5.notice             ifdef(`LOGHOST', /var/log/diary, @loghost)

หมายเหตุ: ifdefถูกประมวลผลล่วงหน้าด้วยm4บนเครื่องที่มีชื่อโฮสต์ / ชื่อโฮสต์ "loghost" ข้อความจะถูกบันทึกลงในไฟล์ / var / log / Diary ในที่อื่น ๆ ทั้งหมดจะถูกส่งไปยังบริการ syslog ระยะไกลที่ loghost ในการทดสอบการกำหนดค่าชนิดนี้สามารถตั้งค่าไฟล์การส่งผ่าน m4 สำหรับการขยาย (ออกไป-D LOGHOSTเพื่อดูว่ามันจะดูในระบบไม่ได้เรียกว่าloghost :

theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf


1
echo "`date` text here" >> filename

หรือ

echo "text here `date`"|tee -a filename

เพิ่มเติมเกี่ยวกับที


backtick เดียวเท่านั้น
Balaswamy vaddeman

1
สำหรับสิ่งที่คุ้มค่าฉันขอแนะนำให้ใช้$(..)มากกว่า backticks เพื่อทดแทนคำสั่ง ข้อมูลเพิ่มเติม: unix.stackexchange.com/questions/11576/…
rahmu

0

รวมคำตอบที่แตกต่างกันสองสามข้อเพื่อให้ได้สิ่งที่ฉันค้นหาซึ่งเป็นตัวเลือกที่หลากหลาย

  1. รวดเร็ว
    user @ hostname: ~ / Documents $ echo text >> ชื่อไฟล์
    user @ hostname: ~ / Documents $ cat ชื่อไฟล์
    ข้อความ
    
  2. หลายบรรทัด
    user @ hostname: ~ / Documents $ cat >> filename2 << EOF
    > บรรทัดข้อความ 1
    > บรรทัดข้อความ 2
    > บรรทัดข้อความ 3
    > EOF
    user @ hostname: ~ / Documents $ cat filename2  
    บรรทัดข้อความ 1
    บรรทัดข้อความ 2
    บรรทัดข้อความ 3
    
    1. แก้ไขไฟล์ที่หมายเลขบรรทัดที่กำหนด

      user @ hostname: ~ / Documents $ sed -i '2iinserting บรรทัดใหม่' ชื่อไฟล์ 2
      user @ hostname: ~ / Documents $ cat filename2
      บรรทัดข้อความ 1
      การแทรกบรรทัดใหม่
      บรรทัดข้อความ 2
      บรรทัดข้อความ 3
      
    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.