我有一个具有以下结构的文件 (filename.txt
):
>line1
ABC
>line2
DEF
>line3
GHI
>line4
JKL
我想打乱字符串中不以>
开头的字符。输出将(例如)如下所示:
>line1
BCA
>line2
DFE
>line3
IHG
>line4
KLJ
这就是我尝试打乱字符串中字符的方式:sed 's/./&\n/' |混音 | tr -d "\n"
。看起来它有效,但它没有考虑换行符。此外,它对所有数据执行命令,而不仅仅是不以 >
开头的行。
最佳答案
使用 perl
和 ruby
$ # split// to get individual characters
$ # join "" to join characters with empty string
$ # if !/^>/ to apply the change only for lines not starting with >
$ # alternate: perl -MList::Util=shuffle -lne 'print /^>/ ? $_ : shuffle split//'
$ perl -MList::Util=shuffle -lpe '$_=join "", shuffle split// if !/^>/' ip.txt
>line1
CBA
>line2
FED
>line3
IHG
>line4
JKL
$ # $_.chars to get individual characters
$ # * "" to join array elements with empty string
$ ruby -lpe '$_ = $_.chars.shuffle * "" if !/^>/' ip.txt
>line1
BAC
>line2
EDF
>line3
GHI
>line4
JKL
关于BASH - 随机播放文件中字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49555930/