2014-10-12 48 views
3

所以我有以下輸出這一功能:Bash-爭奪字符

AGsg4SKKs74s62# 

我需要找到一種方法來擾亂字符,但不刪除anything..aka所有字符必須爲後存在我爭搶他們。

我只能打包包括awk和sed在內的實用程序。

回答

6
echo 'AGsg4SKKs74s62#' | sed 's/./&\n/g' | shuf | tr -d "\n" 

輸出(例如):

S7s64#2gKAGsKs4 
+0

謝謝!這工作很好。 – 2014-10-12 15:09:50

+0

如果有單詞,我們如何才能將單詞洗牌並且不將單詞分解成字符? – thevoipman 2015-06-22 22:48:53

+0

@thevoipman:請開始一個新的問題。謝謝。 – Cyrus 2015-06-23 05:57:35

3

我知道你有沒有提到Perl的,但它可以做這樣的:

perl -MList::Util=shuffle -F'' -lane 'print shuffle @F' <<<"AGsg4SKKs74s62#" 

-a啓用自動拆分模式和-F''將字段分隔符設置爲空字符串,以便每個字符進入單獨的數組元素。該陣列使用由核心模塊List::Util提供的功能進行混洗。

+1

+1不錯的Perl .. – 2014-10-12 15:08:57

4

這裏是一個純粹的bash函數,沒有工作:

scramble() { 
    # $1: string to scramble 
    # return in variable scramble_ret 
    local a=$1 i 
    scramble_ret= 
    while((${#a})); do 
     ((i=RANDOM%${#a})) 
     scramble_ret+=${a:i:1} 
     a=${a::i}${a:i+1} 
    done 
} 

看看它的工作原理:

$ scramble 'AGsg4SKKs74s62#' 
$ echo "$scramble_ret" 
G4s6s#2As74SgKK 

看上去一切正常。