ฉันจะสะท้อนบางสิ่ง $ file.txt โดยไม่ต้องกลับรถได้อย่างไร


81

เมื่อฉันecho $something >> file.txtบรรทัดใหม่จะถูกผนวกเข้ากับไฟล์

ถ้าฉันต้องการผนวกโดยไม่มีบรรทัดใหม่


3
ระวังecho $somethingให้ดีพฤติกรรมของมันขึ้นอยู่กับIFSตัวแปรและคุณสามารถจบลงด้วยตัวละครที่หายไป คุณสามารถลองต่อไปนี้: var="hello world"; echo $var(สองช่องว่างระหว่างสวัสดีและโลก) หรือหรือvar="hello world"; IFS='l'; echo $var var="-e hello \\n world"; echo $varเพื่อแก้ปัญหานั้นก็ให้ใส่เครื่องหมายคำพูดคู่รอบตัวแปรเช่นนี้: หรือการใช้งานecho "$var" printf
jfg956

คำตอบ:


96

นั่นคือสิ่งที่echo -nมีไว้เพื่อ


4
มีสิ่งที่เทียบเท่าcatหรือไม่? (เช่นเมื่อคุณมีไฟล์something.txtมากกว่าตัวแปร$something)
cboettig

1
@cboettig: ไม่ใช้เครื่องมือที่แตกต่างเพื่อพิมพ์ทุกอย่างยกเว้นขึ้นบรรทัดใหม่
Ignacio Vazquez-Abrams

@cboettig, cat ไม่ได้เพิ่มอะไรลงในเอาต์พุตตามค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องมี '-n' param สำหรับ cat เช่นหากไฟล์ของคุณไม่มีบรรทัดสิ้นสุดในบรรทัดสุดท้ายเชลล์พรอมต์ของคุณจะถูกพิมพ์หลังจากอักขระตัวสุดท้ายของไฟล์และไม่อยู่ในบรรทัดใหม่
Rondo

41

printfechoเป็นอย่างมากที่มีความยืดหยุ่นและพกพามากขึ้นกว่า เช่นเดียวกับการประยุกต์ใช้ C / Perl / etc หากคุณไม่เลิกใช้สตริงรูปแบบด้วย\nจะไม่มีการพิมพ์บรรทัดใหม่:

printf "%s" "$something" >> file.txt

7

หากคุณกำลังใช้เอาต์พุตของคำสั่งคุณสามารถใช้ xargs ร่วมกับ echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr เป็นอีกทางเลือก

หากคุณใช้echoเป็นอินพุตของคุณคุณสามารถหลีกเลี่ยงtr -d '\n'ได้

เทคนิคนี้ยังใช้งานได้เมื่อทำการไพพ์ในเอาต์พุตจากคำสั่งอื่น ๆ (โดยมีเพียงเอาต์พุตบรรทัดเดียว) นอกจากนี้ถ้าคุณไม่ทราบว่าไฟล์ที่ได้ UNIX หรือ DOS tr -d '\n\r'ตอนจบบรรทัดคุณสามารถใช้

นี่คือการทดสอบบางอย่างที่แสดงว่าทำงานได้

ขึ้นบรรทัดใหม่:

something='0123456789' ; echo ${something} | wc -c
11

บรรทัดใหม่ UNIX:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

สไตล์ DOS:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

ทดสอบกับ BSD trและ trGNU

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.