หากสิ่งที่คุณต้องการคือ regex: [\x00-\x7F]
คุณสามารถนำไปใช้กับระบบสาธารณูปโภคต่าง ๆ ได้:
<file LC_ALL=C sed 's/[^\o0-\o177]//g' # GNU sed without POSIXLY_CORRECT
<file LC_ALL=C awk '{gsub(/[^\0-\177]/,"");print}'
<file perl -pe 's/[^[:ascii:]]//g;'
<file LC_ALL=C tr -dc '\0-\177'
เข้าใจว่า sed, awk และ perl คาดหวังว่า "text files" ตามที่กำหนดไว้ใน Unix ทำงานได้ดีในกรณีนี้ แต่โดยเฉพาะ awk เพิ่มบรรทัดใหม่ต่อท้าย (ไม่ว่าจะมีอยู่ในไฟล์ต้นฉบับหรือไม่) (การใช้ printf จะลบบรรทัดใหม่ทั้งหมดในอินพุต) tr ถูกออกแบบมาให้ทำงานกับไฟล์ประเภทใดก็ได้ อย่างไรก็ตาม NUL ( \0
) ไม่ใช่อักขระที่ถูกต้องในไฟล์ข้อความ POSIXและควรหลีกเลี่ยง:
บรรทัดไม่มีอักขระ NUL ...
ในความเป็นจริงอักขระควบคุมจำนวนมากจะสร้างปัญหาอื่น ๆ ภายใต้เงื่อนไขเฉพาะบางอย่าง
ดังนั้นคุณอาจต้องการ[\x07-\x0d\x20-\x7e]
<file LC_ALL=C sed 's/[^\o007-\o015\o040-\o176]//g' # GNU sed without POSIXLY_CORRECT
<file LC_ALL=C awk '{gsub(/[^\0-\15\40-\176]/,"");print}'
<file perl -pe 's/[^\x{7}-\x{d}\x{20}-\x{7e}]//g;'
<file LC_ALL=C tr -dc '\7-\15\40-\176'
ช่วง 7-13 (เป็นทศนิยม) คือ\a\b\t\n\v\f\r
(ตามลำดับ)
ช่วงที่คล้ายกัน (อาจพกพามากกว่า) อาจเขียนเป็น[^[:space:][:print:]] (similar because it doesn't include
\ a \ b` - เบลล์และแบ็กสเปซ -)
<file LC_ALL=C sed 's/[^[:space:][:print:]]//g' # GNU sed without POSIXLY_CORRECT
<file LC_ALL=C awk '{gsub(/[^[:space:][:print:]]/,"");print}'
<file perl -pe 's/[^[:space:][:print:]]//g;'
<file LC_ALL=C tr -dc '[:space:][:print:]'
ที่เกี่ยวข้อง:
Regex ใด ๆ ตัวอักษร ASCII
โซลูชั่น Perl
ไฟล์ข้อความ Posix