我有一个包含单列数据的文本文件。以下面的数据为例
united states
germany
france
canada
其中我试图生成所有可能的混合大小写变体。例如,新文件可能如下所示
United states
uNited states
unIted states
uniTed states
unitEd states
uniteD stated
united States
united sTates
united stAtes
united staTes
united statEs
united stateS
UNited states
依此类推,直到生成每个单词的所有可能的案例变体。
鉴于上述输入和预期输出我有三个问题
答案 0 :(得分:2)
1)否
2)awk和substr()
3)你不会
从这开始:
$ echo 'foo' |
awk '{
for (i=1;i<=length($0);i++) {
print substr($0,1,i-1) toupper(substr($0,i,1)) substr($0,i+1)
}
}'
Foo
fOo
foO
按摩以适应明显的逻辑。
答案 1 :(得分:1)
为了sed的乐趣。
1)是的。 (例如GNU sed版本4.2.1)
2)也许awk,perl
3)见下面的代码
sed -E "s/^.*$/\n&#\n/;:a;s/\n([^#\n]*)([^#\n])#([^#\n]*)\n/\n\1#\u\2\3\n\1#\l\2\3\n/;ta;s/(^\n#|\n$)//g;s/\n#/\n/g;"
这确实假设&#34;#&#34;不是文件中找到的字符串的一部分。
#
标记光标)请注意,#
并不特别。它只需要是一个不会在输入中出现而不是在所需输出中的字符。希望你能找到一个特殊的角色
如果你可以拥有所有角色,那就太复杂了。看看这个答案的评论。可能正在进行讨论。
输出(输入&#34; foo&#34;):
FOO
fOO
FoO
foO
FOo
fOo
Foo
foo