使用 bash 生成排列
是否可以编写一个 bash 脚本,可以从文件中读取每一行并为每一行生成排列(不重复)?使用 awk / perl 就可以了。
File
----
ab
abc
Output
------
ab
ba
abc
acb
bac
bca
cab
cba
is it possible to write a bash script that can read in each line from a file and generate permutations (without repetition) for each? Using awk / perl is fine.
File
----
ab
abc
Output
------
ab
ba
abc
acb
bac
bca
cab
cba
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
我知道我来得太晚了,但为什么不支持扩展呢?
例如:
输出:
另一个有用的例子:
I know I am a little late to the game but why not brace expansion?
For example:
Outputs:
Another useful example:
纯 bash (使用
local
,更快,但无法击败使用下面的 awk 或下面的 Python 的其他答案):纯 bash (使用 subshell,慢得多):
由于提问者提到 Perl 很好,我认为 Python 2.6+/3.X 也很好:
对于 Python 2.5+/3.X:
在我的计算机上使用更大的测试文件:
Pure bash (using
local
, faster, but can't beat the other answer using awk below, or the Python below):Pure bash (using subshell, much slower):
Since asker mentioned Perl is fine, I think Python 2.6+/3.X is fine, too:
For Python 2.5+/3.X:
On my computer using a bigger test file:
使用
crunch
util 和bash
:输出:
此处教程 https://pentestlab.blog/2012/ 07/12/创建-wordlists-with-crunch/
Using the
crunch
util, andbash
:Output:
Tutorial here https://pentestlab.blog/2012/07/12/creating-wordlists-with-crunch/
使用 awk 的更快版本
:
A faster version using awk
usage:
有关排列示例,请参阅 Perl Cookbook。它们是面向单词/数字的,但在上面的示例中使用简单的
split()
/join()
就足够了。See the Perl Cookbook for permutation examples. They're word/number oriented but a simple
split()
/join()
on your above example will suffice.Bash 单词列表/字典/排列生成器:
以下 Bash 代码生成 0-9、az、AZ 的 3 个字符排列。它的输出为 (10+26+26)^3 = 238,328 个单词。
它的可扩展性不太好,因为您可以看到您需要增加
for
循环的数量来增加组合字符。在汇编或 C 语言中使用递归来编写这样的东西会快得多,以提高速度。 Bash 代码仅用于演示。PS
您可以使用
list=$(cat input.txt)
示例输出填充
$list
变量:Bash word-list/dictionary/permutation generator:
The following Bash code generates 3 character permutation over 0-9, a-z, A-Z. It gives you (10+26+26)^3 = 238,328 words in output.
It's not very scalable as you can see you need to increase the number of
for
loop to increase characters in combination. It would be much faster to write such thing in assembly or C using recursion to increase speed. The Bash code is only for demonstration.P.S.
You can populate
$list
variable withlist=$(cat input.txt)
SAMPLE OUTPUT:
因为你永远不可能拥有足够神秘的 Bash-oneliners:
它非常快 - 至少在我的机器上:
但是请注意,当你超过 8 个字符时,这个会占用大量内存......
Because you can never have enogh cryptic Bash-oneliners:
It's pretty fast - at least on my machine here:
But be aware that this one will eat a lot of memory when you go beyond 8 characters...
名为输入的文件:
a
b
c
d
如果你想要输出:
a b
一个c
一个d
乙乙
BC
bd
cc
cd
dd
您可以尝试以下 bash 脚本:
file named input:
a
b
c
d
If you want the output:
a b
a c
a d
b b
b c
b d
c c
c d
d d
You can try the following bash script:
这个怎么样
它会打印
Hows about this one
it will print
只是一个 4 行 bash 笑话 - 4 个字母/名称的排列:
我喜欢 Bash! :-)
Just a 4-lines-bash joke - permutation of 4 letters/names:
I like Bash! :-)