。
以下是 2020 年最糟糕的 200 个密码。
https://nordpass.com/most-common-passwords-list/
有什么简单的转换方法?
将 上述网页中的
200 行复制并粘贴到 file1.txt 中
从此命令开始...
cat file1.txt | tr "\n" "\t" > file2.txt
转换 file1.txt -- 换行列表:
Position
Password
Number of users
Time to crack it
Times exposed
1.
arrow up green
(2)
123456
2,543,285
Less than a second
23,597,311
2.
arrow up green
(3)
123456789
961,435
Less than a second
7,870,694
3.
(new)
picture1
371,612
3 Hours
11,190
4.
arrow up green
(5)
password
360,467
Less than a second
3,759,315
5.
arrow up green
(6)
12345678
322,187
Less than a second
2,944,615
6.
arrow up green
(17)
111111
230,507
Less than a second
3,124,368
7.
arrow up green
(18)
123123
189,327
Less than a second
2,238,694
8.to...200.
将上面的file1.txt 换行列表转换为
file2.txt 列表:
Position Password Number of users Time to crack it Times exposed
1.arrow up green(2) 123456 2,543,285 Less than a second 23,597,311
2.arrow up green(3) 123456789 961,435 Less than a second 7,870,694
3.(new) picture1 371,612 3 Hours 11,190
4.arrow up green(5) password 360,467 Less than a second 3,759,315
5.arrow up green(6) 12345678 322,187 Less than a second 2,944,615
6.arrow up green(17) 111111 230,507 Less than a second 3,124,368
7.arrow up green(18) 123123 189,327 Less than a second 2,238,694
8.to...200.
有什么简单的转换方法?
--
答案1
如果每行输出恰好由 5 行输入组成(如标题一样),那么使用 会很容易<file1 paste - - - - -
。不幸的是,标题占用 5 行,条目每个占用 6 或 7 行。这意味着您需要一些逻辑来从正确数量的输入行构建输出行。
可以是这样的:
<file1.txt sed '
1 ! {
N
/(.*)/ ! N
s/\n//g
}
N;N;N;N
s/\n/\t/g
'
处理第一行时,条件 ( 1 !
) 为假,因此跳过块 ( {…}
)。接下来的四行被附加到模式空间 ( N;N;N;N
) 中,并且所有五行之间的换行符都转换为制表符 ( s/\n/\t/g
)。最后,模式空间打印一个尾随换行符(因为sed
默认情况下会自动执行此操作)。这是标题。
稍后条件 ( ) 为真,因此执行1 !
块 ( )。块内会将一个额外的行 ( ) 附加到模式空间中。如果模式空间不包含括号 ( ),则会附加另一行 ( )。两行或三行之间的换行符将被删除(替换为空,)。此时我们有了第一个字段。处理在块之后继续,就像在标题的情况下一样。{…}
N
/(.*)/ !
N
s/\n//g
您决定这是否是一种“简单的方法”。:)
输出采用制表符分隔的列形式,非常适合进一步解析。如果您希望输出看起来不错,则可以使用管道sed
(column -t -s $'\t'
其中$'\t'
扩展为文字制表符;此语法在 Bash 中有效,但并非所有其他 shell 都支持它)。