ฉันต้องการส่งออกประวัติทุบตี Linux ไปยังไฟล์ จากนั้นสร้างเชลล์สคริปต์ใหม่ทีละบรรทัดพร้อมเนื้อหาของแต่ละบรรทัด ฉันได้ลองสิ่งนี้แล้วจากบรรทัดคำสั่ง ..

ตัวอย่างเช่น

ผลลัพธ์ของไฟล์ประวัติ

73  nmap -T4 -A -v 127.0.0.1
74  nmap -T4 -A -v 192.168.0.1/24

ปัญหาแรกของฉันคือหมายเลขบรรทัด ... เพื่อลบออก ฉันใช้คำสั่งนี้

history | cut -c 8- > one.txt

ซึ่งให้ผลลัพธ์แบบนี้ ..

nmap -T4 -A -v 127.0.0.1
nmap -T4 -A -v 192.168.0.1/24

มีปัญหาที่นี่เนื่องจากข้อความมีช่องว่าง

cat one.txt | tr -cd '[:alnum:]\n\[email protected]#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt

ฉันใช้คำสั่งด้านบนเพื่อลบอักขระที่ไม่ถูกต้องซึ่ง Linux ไม่ต้องการให้รวมอยู่ในชื่อไฟล์

นี่ฉันชนกำแพง...

มันเลอะเทอะและเลอะเทอะ...

ต้องมีวิธีที่ง่ายกว่าที่สวยกว่า...

answer

อย่ารำคาญกับการพยายามหาวิธีเขียนประวัติของคุณลงในไฟล์ ระบบ Ubuntu ของคุณใช้ไฟล์~/.bash_history. มันจึงเป็นเรื่องง่าย

cat ~/.bash_history

เพื่อดึงเนื้อหาของไฟล์

เพื่อแยกไฟล์ประวัติออกเป็นไฟล์ตามบรรทัด

split --verbose -l1 ~/.bash_history

(ทำสิ่งนี้กับสำเนาในไดเร็กทอรีแยกต่างหาก)

ในการเพิ่ม shebang:

for file in *; do 
    sed  -i '1i #!/bin/sh' $file
done