การใช้sed
เพื่อสร้างข้อความที่มีอักขระบางตัวที่เหมาะสมสำหรับใช้ในสตริงตัวอักษรนั้นตรงไปตรงมา:
sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"
แต่ฉันจะทำสิ่งที่คล้ายกับไฟล์ข้อความที่มีอักขระขึ้นบรรทัดใหม่ได้อย่างไร
การใช้sed
เพื่อสร้างข้อความที่มีอักขระบางตัวที่เหมาะสมสำหรับใช้ในสตริงตัวอักษรนั้นตรงไปตรงมา:
sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"
แต่ฉันจะทำสิ่งที่คล้ายกับไฟล์ข้อความที่มีอักขระขึ้นบรรทัดใหม่ได้อย่างไร
คำตอบ:
ใช้:
sed ':a;N;$!ba;s/\n/\\n/g'
ซึ่งใช้คำตอบจากฉันจะแทนที่บรรทัดใหม่ (\ n) โดยใช้ sed ได้อย่างไร แทนที่อักขระขึ้นบรรทัดใหม่ที่ใช้ Escape แทนการแทนที่เพื่อจับคู่คำถามที่นี่
sed ขึ้นกับบรรทัดและอาจทำให้เกิดปัญหาเมื่อพยายามแทนที่อักขระขึ้นบรรทัดใหม่
เอกสารอย่างเป็นทางการสำหรับ sed ทำให้การอ้างอิงที่เฉพาะเจาะจงกับตัวละครขึ้นบรรทัดใหม่และรัฐพวกเขาจะถูกถอดออกก่อนที่จะถูกส่งไปยัง sed
ฉันอยากจะแนะนำว่า 'tr' น่าจะเหมาะสมกว่าที่นี่
ตัวอย่างเพื่อแทนที่อักขระขึ้นบรรทัดใหม่ด้วยช่องว่าง:
tr '\n' ' ' < inputfile
[\r\n]
สะอาดกว่านี้หรือ
tr "\n" "\\n"
ก่อนที่จะโพสต์คำถามนี้และมันเพิ่งแทนที่อักขระบรรทัดใหม่ด้วยแบ็กสแลช ดูเหมือนว่าจะเปลี่ยนลำดับเป็นตัวละครเดียวเท่านั้น
ฉันต้องการขยายโซลูชันของ David Moytan :
cat /etc/passwd | perl -e 'while(<>) { $_ =~ s/[\r\n]/__NEWLINE__/g; print "$_" }'
ฉันมีปัญหานี้เช่นกัน
คุณสามารถใช้ฟังก์ชั่น \ a เพื่อเริ่มทุกบรรทัดใหม่ด้วยลำดับการหลบหนีที่เหมาะสมจากนั้นไพพ์ฟังก์ชันที่เกิดขึ้นให้เป็น echo -n ซึ่งจะระงับการขึ้นบรรทัดใหม่
echo -n $(sed '\a
\\n');
ติดอะไรก็ตามที่คุณกำลังติดอยู่ในวงเล็บก่อนคำสั่ง sed