2014-06-26 29 views
0

是否有一個用於將字符串中的所有字符移動一些i數字的單行程式。輸入字符串可以包含任何ASCII字符。這將是一個密碼。如何在linux中使用一定數量的字符來移動字符串

例如,如果b來後a然後command 1 "ab"回報"bc"command 3 "ab"回報"de"。它應該與任何ASCII字符,而不僅僅是字母。

+1

請指定您使用的語言(帶有標籤)並添加您嘗試過的代碼(在您的問題中)。 –

回答

0

你想要的命令叫做凱撒。

0

使用Perl

echo -n bbb | perl -F'' -ane 'foreach(@F){$_++; printf "$_"}END{print "\n"}' 
ccc 

如果你需要轉向A N個字符(的情況下面4):

echo -n bbb | perl -F'' -ane 'foreach(@F){ $a=ord($_); $a+=4; print chr($a)} END{print "\n"}' 
fff 

轉移到負值:

echo -n bbb | perl -F'' -ane 'foreach(@F){ $a=ord($_); $a-=1; print chr($a)} END{print "\n"}' 
aaa 
+0

有沒有辦法做一個負數,轉移-1 – siamii

+0

加入我的回答。 – Tiago

0

這GAWK命令給你新的序列ascii code+1

awk 'BEGIN{FS=OFS="";s=2;for(n=0;n<=127;n++)ord[sprintf("%c",n)]=n} 
      {for(i=1;i<=NF;i++)$i=sprintf("%c",(ord[$i]+s)%127)}7' 

測試與串移步驟2

kent$ echo "xyab+123"|awk 'BEGIN{FS=OFS="";s=2;for(n=0;n<=127;n++)ord[sprintf("%c",n)]=n}{for(i=1;i<=NF;i++)$i=sprintf("%c",(ord[$i]+s)%127)}7' 
z{cd-345 

你只需要傳遞s作爲變量,以限定換檔步驟。

+0

這隻適用於字母對嗎?並非所有ASCII字符 – siamii

+0

如果您閱讀我的答案,您會在例子中看到我有'+ - {123456',它們不是字母。如果你閱讀代碼,你會發現它適用於ascii代碼'0-127'。 @siamii – Kent

相關問題