ฉันจะแทนที่บรรทัดใหม่ด้วยลำดับการยกเว้นได้อย่างไร


3

การใช้sedเพื่อสร้างข้อความที่มีอักขระบางตัวที่เหมาะสมสำหรับใช้ในสตริงตัวอักษรนั้นตรงไปตรงมา:

sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"

แต่ฉันจะทำสิ่งที่คล้ายกับไฟล์ข้อความที่มีอักขระขึ้นบรรทัดใหม่ได้อย่างไร


Sed จะไม่แสดงอักขระบรรทัดใหม่ในส่วนการค้นหา Sed เก่าเกินไปเช่นโปรแกรมเดิม คุณสามารถใช้ Perl ได้มันมีค่าเทียบเท่ากับการค้นหาและแทนที่ของ sed
barlop

คำตอบ:



0

sed ขึ้นกับบรรทัดและอาจทำให้เกิดปัญหาเมื่อพยายามแทนที่อักขระขึ้นบรรทัดใหม่

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

ฉันอยากจะแนะนำว่า 'tr' น่าจะเหมาะสมกว่าที่นี่

ตัวอย่างเพื่อแทนที่อักขระขึ้นบรรทัดใหม่ด้วยช่องว่าง:

tr '\n' ' ' < inputfile

จะไม่[\r\n]สะอาดกว่านี้หรือ
theoden

ฉันเดาว่าทั้งหมดขึ้นอยู่กับแหล่งข้อมูลและข้อกำหนด OP อ้างถึงบรรทัดใหม่เท่านั้น ฉันอยากจะแนะนำให้ลองทั้งสองอย่างและดูว่าผลิตผลใดดีที่สุด YMMV
David Moylan

ฉันลองใช้tr "\n" "\\n"ก่อนที่จะโพสต์คำถามนี้และมันเพิ่งแทนที่อักขระบรรทัดใหม่ด้วยแบ็กสแลช ดูเหมือนว่าจะเปลี่ยนลำดับเป็นตัวละครเดียวเท่านั้น
Melab

@Melab ถูกต้อง คำสั่ง 'tr' จะทำการแทนที่อักขระเดียวเท่านั้น
David Moylan

ถ้าอย่างนั้นจะช่วยได้อย่างไร?
Melab


0

ฉันมีปัญหานี้เช่นกัน

คุณสามารถใช้ฟังก์ชั่น \ a เพื่อเริ่มทุกบรรทัดใหม่ด้วยลำดับการหลบหนีที่เหมาะสมจากนั้นไพพ์ฟังก์ชันที่เกิดขึ้นให้เป็น echo -n ซึ่งจะระงับการขึ้นบรรทัดใหม่

echo -n $(sed '\a
\\n');

ติดอะไรก็ตามที่คุณกำลังติดอยู่ในวงเล็บก่อนคำสั่ง sed

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