如何创建一个名称包含bash中每个可打印字符的文件?

时间:2014-10-17 15:21:16

标签: bash

我有一个奇怪的问题。在我正在安装的nfs文件系统上它似乎将所有连字符翻译成冒号。例如,“a-b”变为“a:b”,“a-b”变为“a :: b”。我想测试它翻译的其他内容。

一种方法是创建一个名称包含每个ASCII可打印字符的文件,并查看它的内容。怎么能用bash做到这一点?

4 个答案:

答案 0 :(得分:2)

Perl救援:

perl -e '$name = join "", grep !m{/}, map chr, 32 .. 126; open my $F, ">", $name or die $!'

我省略了/

答案 1 :(得分:2)

这是对纯粹Bash解决方案的尝试:

filename=
for (( charnum=1 ; charnum<256 ; charnum++ )) ; do
    printf -v char_oct_esc '%03o' "$charnum"
    printf -v char "\\$char_oct_esc"
    [[ $char != / && $char =~ [[:print:]] ]] && filename+=$char
done

echo >"$filename" \
    && printf 'Created <<%s>>\n' "$filename" \
    || printf 'Failed to create <<$filename>>\n' "$filename"

有关在Bash中转换字符和数字之间的最佳信息,请参阅http://mywiki.wooledge.org/BashFAQ/071

答案 2 :(得分:0)

你可以尝试

man ascii > all_ascii_chars.txt

答案 3 :(得分:0)

使用perl:

sub isPrint {
    my $c = shift;
    return $c =~ /\P{IsC}/
}

my $i; 
for ($i=0; $i<128; $i++) {
    if(isPrint(chr($i))) {
        print chr($i);
    }   
}

输出:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~t