使用bash破坏一串随机字符

时间:2013-08-08 17:17:58

标签: bash shell

我有一个看起来像

的字符串
/6435045045/hpdqbhflyuhv_EOlXG

我想通过更改几个字符来破坏字符串。我做了

$string | sed 's/E/A/g' 

它运行正常,但字符串是动态的,现在生成的字符串中没有“E”。 是否可以通过使用bash ??

将一些随机x字符替换为前x个字符来破坏字符串

3 个答案:

答案 0 :(得分:2)

> string="/6435045045/hpdqbhflyuhv_EOlXG"
> n=8
> m=`expr ${#string} - $n`
> string="`< /dev/urandom tr -dc A-Za-z0-9_ | head -c$n``echo $string | tail -c$m`"
> echo $string
oZeHdOD_45/hpdqbhflyuhv_EOlXG

答案 1 :(得分:0)

你想如何rotten制作字符串?

tr 'A-Za-z' 'N-ZA-Mn-za-m' <<<$string

答案 2 :(得分:0)

这是bash中的一个脚本。它允许您指定字符范围和字符串内容更改的次数。

#!/bin/bash

# syntax: corrupt <string> <times> <character range in ascii codes>
#
function corrupt {
    local STRING=$1
    local STRING_LENGTH=${#1}

    local TIMES=$2

    local RANGE=("${@:3}")
    local RANGE_LENGTH="${#RANGE[@]}"

    local CHARS=()
    local C P I=0 IFS=''

    while read -rd $'\0' C; do
        CHARS[I++]=$C
    done < <(echo -ne "$(printf '\\x%x\\x00' "${RANGE[@]}")")

    for (( I = 0; I < TIMES; ++I )); do
        C=${CHARS[RANDOM % RANGE_LENGTH]}
        P=$(( RANDOM % STRING_LENGTH ))
        STRING="${STRING:0:P}${C}${STRING:P + 1}"
    done

    echo "$STRING"

    # Uncomment to save the value to variable __.
    # __=$STRING
}

corrupt "/6435045045/hpdqbhflyuhv_EOlXG" 10 {32..126}

注意:将数量(次数)增加到更高的值以获得更具破坏性的结果。