ฉันต้องเพิ่มแท็ก PHP รอบ ๆ ไฟล์ ง่ายต่อการผนวกเข้าด้วยกัน
find . -exec echo "?>" >> '{}' \;
แต่ฉันจะเพิ่มแท็กไว้ล่วงหน้าได้<?php
อย่างไร
ฉันต้องเพิ่มแท็ก PHP รอบ ๆ ไฟล์ ง่ายต่อการผนวกเข้าด้วยกัน
find . -exec echo "?>" >> '{}' \;
แต่ฉันจะเพิ่มแท็กไว้ล่วงหน้าได้<?php
อย่างไร
คำตอบ:
sed -i "1s/^/<?php /" file
( -i
สำหรับการแก้ไขในสถานที่)
รุ่นพกพาเพิ่มเติม:
ed file <<!
1s/^/<?php /
wq
!
sed
และอนุญาตการเพิ่มส่วนต่อท้ายการสำรองข้อมูล
-i
ไม่สามารถเคลื่อนย้ายได้ไวยากรณ์จะแตกต่างกันระหว่างการนำไปใช้งานและแบ่งการเชื่อมโยง คุณควรใช้โปรแกรมที่ออกแบบมาเพื่อแก้ไขไฟล์
คุณสามารถใช้AWK
ตัวกรองแบบนี้
awk '{if (NR == 1) พิมพ์ "% s% s", "คำนำหน้า", $ 0; อื่นพิมพ์ $ 0} 'testfile> newfile
PREFIX
สตริงคำนำหน้า php ของคุณอยู่ที่ไหน
ฉันยังไม่ได้แสดงความคิดเห็น แต่จะทำทั้งหมดในขั้นตอนเดียว:
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
คุณสามารถทำได้ด้วย perl one-liner:
perl -0777 -p -i -e "s/^/hey /g" testfile
-0777
กองกำลังไฟล์ slurping โหมดเพื่อให้ไฟล์ทั้งหมดจะถูกอ่านเป็นหนึ่งบรรทัด -p
เปิดใช้งานการวนซ้ำ -i
เปิดใช้งานการแก้ไขไฟล์ในตำแหน่ง ^
ระบุจุดเริ่มต้นของบรรทัด
$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
ปรับปรุง:ตามที่ระบุไว้ในความคิดเห็นที่คุณสามารถเลือกอัตโนมัติสร้างสำรองข้อมูลโดยใช้แทน-i.bak
-i
สิ่งนี้ให้ความปลอดภัยเพิ่มเติมในกรณีที่เกิดข้อผิดพลาดในคำสั่งของคุณ อาร์กิวเมนต์ที่-i
เป็นส่วนต่อท้ายของข้อมูลสำรอง
เมื่ออัพเดตไฟล์จำนวนมากคุณสามารถรันคำสั่งด้วย-i.backup${RANDOM}
ตรวจสอบว่าไฟล์ทั้งหมดถูกอัพเดตอย่างถูกต้องจากนั้นลบไฟล์ทั้งหมดที่มีนามสกุลนั้น
-i
ธงโดยไม่ต้องต่อท้ายกรุณาเตือนผู้อ่านที่นี้หมายถึงคุณจะได้รับไม่มีการสำรองข้อมูล สำหรับอีกสองสามตัวอักษร ( -i.bak
) คุณจะได้รับการสำรองข้อมูลในกรณีที่สายการบินหนึ่งของคุณมีการพิมพ์ผิด พิมพ์ผิดค่อนข้างง่าย (พูดลืม-p
ธง) สามารถทำลายทั้งวันของคุณเป็นอย่างอื่น
sed
ใช้สำหรับแก้ไขสตรีม - ไฟล์ไม่ใช่สตรีม ใช้โปรแกรมที่มีความหมายสำหรับวัตถุประสงค์นี้เหมือนหรือed
ตัวเลือกที่จะไม่ได้เป็นเพียงไม่พกพาก็ยังจะทำลาย symlinks ใด ๆ ที่คุณอาจพบเพราะมันเป็นหลักจะลบมันและสร้างมันซึ่งเป็นจุดหมายex
-i
sed
for file in foo bar baz; do
ed -s "${file}" << EOF
0a
<?php
.
w
EOF
done
ed
เพื่อจุดประสงค์ดังกล่าวให้แสดงสิ่งนี้ในคำตอบของคุณ
ทางเลือกอื่นสำหรับสิ่งที่คุณเขียนเพื่อเพิ่มบางสิ่งลงในส่วนท้ายของทุกไฟล์ในไดเรกทอรี (ในbash
):
for FNAME in *
do
echo "?>" >> $FNAME
done
แม้ว่าฉันจะชอบfind
หนึ่งซับของคุณ:)
$FNAME
ควรจะ$fname
- โดยการประชุมเราใช้ประโยชน์จากตัวแปรสภาพแวดล้อม (PAGER, EDITOR, SHELL, ... ) และตัวแปรเชลล์ภายใน (BASH_VERSION, RANDOM, ... ) ชื่อตัวแปรอื่น ๆ ทั้งหมดควรมีตัวอักษรพิมพ์เล็กอย่างน้อยหนึ่งตัว อนุสัญญานี้หลีกเลี่ยงการแก้ไขตัวแปรสภาพแวดล้อมและภายในโดยไม่ตั้งใจ
มีวิธีง่าย ๆ
echo "startstr$(cat filename)endstring" > filename.new