ลบบรรทัดทั้งหมดที่มีแบ็กสแลชจากไฟล์ข้อความ


8

ฉันมีไฟล์ที่มีเนื้อหาเช่นนี้:

apple
b\all
cat
\34
egg

ฉันต้องการลบบรรทัดทั้งหมดที่มีแบ็กสแลช ฉันพยายามใช้

sed '/\/d' pdataf.txt

แต่มันไม่ทำงาน ฉันควรลองทำอะไร

คำตอบ:


10

คุณเพียงแค่ต้องหลบหนีแบ็กสแลช (ยกเว้นการหลบหนี!)

$ sed '/\\/d' pdataf.txt
apple
cat
egg

8

grepพิมพ์ทุกบรรทัดที่ไม่มี\:

grep -v '\\' pdataf.txt

ในทำนองเดียวกันawk:

awk '!/\\/' pdataf.txt

1

คุณต้องหลีกเลี่ยงแบ็กสแลช (อักขระเลี่ยง) เพื่อแทนที่ และหากรุ่นของคุณรองรับมันตัวเลือก -i (แบบแทน) จะทำการแก้ไขในไฟล์ของคุณโดยที่คุณไม่ต้องให้ไฟล์ระดับกลาง นอกจากนี้หากคุณใช้ตัวเลือก -i โปรดทราบว่ามันยอมรับนามสกุลไฟล์สำรอง (แนะนำ!) อย่างไรก็ตามหากคุณไม่ได้ระบุไว้จะมีประโยชน์ในการนำหน้าคำสั่ง sed ของคุณด้วย -e เพื่อแจ้งให้ทราบว่าคุณไม่ได้ใช้ นามสกุลไฟล์สำรอง

วางมันทั้งหมดเข้าด้วยกัน:

# Run sed to remove lines with backslash in them

$ sed -i -e '/\\/d' pdataf.txt

# Cat your file to confirm edits

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