Tek ihtiyacınız olan bir normal ifade ise: [\x00-\x7F]
birkaç yardımcı programa başvurabileceğiniz:
<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 ve perl'in Unix'te tanımlandığı gibi "metin dosyaları" beklediğini anlayın. Bu durumda hepsi iyi çalışıyor. Ancak özellikle awk, yeni bir satır ekler (kaynak dosyada var olsun ya da olmasın) (printf kullanarak girişteki TÜM yeni satırları kaldırır). Tr, herhangi bir dosya türüyle çalışacak şekilde tasarlanmıştır. Ancak, NUL ( \0
) bir POSIX metin dosyasında geçerli bir karakter değildir ve bundan kaçınılmalıdır:
Satırlar NUL karakter içermiyor ...
Aslında, birçok kontrol karakteri bazı özel koşullar altında başka sorunlar yaratacaktır.
Yani, muhtemelen ihtiyacın var[\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 aralığı (ondalık olarak) \a\b\t\n\v\f\r
(sırayla).
Benzer (muhtemelen daha taşınabilir) bir aralık [^[:space:][:print:]] (similar because it doesn't include
\ a \ b` --bell ve backspace--) olarak yazılabilir .
<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:]'
İlgili:
Herhangi bir ASCII karakteri
Perl çözümü
Posix Metin Dosyası