标签: one-liner

Perl/Raku 简洁的网络服务器一句话?

如果没有的话,是否有任何简洁的单行文字可以快速提供页面或目录index.html?像这样的东西:

python3 -m http.server
Run Code Online (Sandbox Code Playgroud)

找不到Raku单线。
比较Perl来自https://gist.github.com/willurd/5720255https://github.com/imgarylai/awesome-webservers的内容:

plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
Run Code Online (Sandbox Code Playgroud)
perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'
Run Code Online (Sandbox Code Playgroud)

使用前安装它们(无需额外安装Python):

cpan Plack
cpan HTTP::Server::Brick
Run Code Online (Sandbox Code Playgroud)

Plack引入了大量的依赖项,因此我没有继续安装,并且HTTP::Server::Brick由于测试失败而没有安装在我的计算机上。

Perl和两者Raku通常都被认为在单行句中很好用,并且旨在提供 DWIM: “根据上下文尝试做正确的事情”“猜测......提供虚假输入时预期的结果”

所以我希望他们——尤其是现代和富有的Raku——能够提供一个与Python.
或者我错过了什么?
如果缺少该功能,是否有计划?
如果缺乏且不实施,为什么?

perl webserver raku one-liner

7
推荐指数
2
解决办法
397
查看次数

什么是用于在字段之间交换的 Unix oneliner?

我有一个包含列表的文件

id1 str1 str2 .. strn
id2 str1 str2 .. strm
Run Code Online (Sandbox Code Playgroud)

(str的数量可以变化)并且我想要一个将其转换为的oneliner

str1 str2 .. strn [id]
str1 str2 .. strm [id]
Run Code Online (Sandbox Code Playgroud)

awk 应该有一种方法可以做到这一点,但我不知道当它们的长度可变时如何获取 $1 之后的“所有字段”。

我的想法是这样的

cat file | awk '{ print $2 and the rest " [" $1 "]" }'
Run Code Online (Sandbox Code Playgroud)

但只是缺少“2 美元和其余的”......

awk one-liner

6
推荐指数
1
解决办法
141
查看次数

如何在 unicode 形式之间进行转换:字符串、名称、数字

我最近更频繁地使用 unicode,想知道是否有一个命令行工具可以在其形式之间转换 unicode。

\n

很高兴能够说:

\n
uni_convert "\xe2\x98\x83" --string\n
Run Code Online (Sandbox Code Playgroud)\n

并且知道该字符串在 unicode 中定义为“SNOWMAN”。

\n

bash perl one-liner

5
推荐指数
2
解决办法
238
查看次数

为什么在单行中的 perl 替换和匹配(m)运算符中使用 utf8 模式不起作用?

我在使用 Perl 的单行替换文件中的一些 utf8 文本时发现了这个问题。我知道如何在命令行上处理 utf8(使用 Perl 或 Python)?. 它们不适用于这种情况。操作系统是linux,locate设置为utf8

# make file to contain pattern
$echo ????? ?? ???????>file
$cat file
????? ?? ???????
# also grep finds it
$grep "????? ?? ???????" file
????? ?? ???????
# different perl hacks mentioned at reference question don't work:
$perl -C63 -n -e "print if m{????? ?? ???????}" file
# does not show anything
$perl -Mutf8 -n -e "print if m{????? ?? ???????}" file
# does not show anything …
Run Code Online (Sandbox Code Playgroud)

linux perl encoding perlop one-liner

4
推荐指数
1
解决办法
76
查看次数

如何计算整数的倒数之和?

我想计算一个整数列表的倒数之和(看看它是否大于或等于1):

在此输入图像描述

我想使用整数来避免浮点舍入问题。为此,我想这样解决:

在此输入图像描述

我已经这样做了:

import numpy as np

my_list = [2, 3, 5, 7]
numerator = 0
for i in range(len(my_list)):
    numerator += np.product(my_list[:i] + my_list[i+1 :])
denominator = np.product(my_list)
result = numerator>=denominator
Run Code Online (Sandbox Code Playgroud)

但我觉得应该为此写一句俏皮话。有没有一个函数可以计算分数倒数之和?或者也许是一个从列表中计算分子的函数?

python integer rounding-error fractions one-liner

4
推荐指数
1
解决办法
527
查看次数

实现 toFindResult() 的 Java Matcher 类

根据这个问题find和之间有很大的区别matches(),仍然以某种形式提供结果。

作为一种实用程序,该toMatchResult函数返回matches()操作的当前结果。我希望我的假设(1)是有效的。(正则表达式在这里

        String line = "aabaaabaaabaaaaaab";
        String regex = "(a*b)a{3}";
        Matcher matcher = Pattern.compile(regex).matcher(line);
        matcher.find();
//        matcher.matches();(1) --> returns false because the regex doesn't match the whole string
        String expectingAab = matcher.group(1);
        System.out.println("actually: " + expectingAab);

Run Code Online (Sandbox Code Playgroud)

不幸的是,以下方法无效(例外:未找到匹配项):

        String line = "aabaaabaaabaaaaaab";
        String regex = "(a*b)a{3}";
        String expectingAab = Pattern.compile(regex).matcher(line).toMatchResult().group(1);
        System.out.println("actually: " + expectingAab);
Run Code Online (Sandbox Code Playgroud)

这是为什么?我的第一个假设是它不起作用,因为正则表达式应该匹配整个字符串;但同样的异常也与字符串值一起抛出aabaaa......

当然,匹配器需要使用 设置为正确的状态find(),但是如果我想使用 oneliner 呢?我实际上为此实现了一个实用程序类:


protected static class FindResult{ …
Run Code Online (Sandbox Code Playgroud)

java regex java-8 one-liner

3
推荐指数
1
解决办法
75
查看次数

为什么这个 Perl one-liner of Fibonacci 工作?

print$f+=$z=$f-$z,$/for--$z..8
Run Code Online (Sandbox Code Playgroud)

或者,如果将 $z 替换为 $!,则可以执行以下操作。

print$f+=$!=$f-$!for--$!..8
Run Code Online (Sandbox Code Playgroud)

但为什么?$!是错误 perlval,不是吗?

perl one-liner

3
推荐指数
1
解决办法
184
查看次数

列表理解而不是循环中的扩展

我可以将这段代码写在一行中吗?我尝试在列表理解中使用链。

def divisors(n):
    result = []
    for div in range(1, int(sqrt(n)) + 1):
        if n % div == 0:
            result.extend([div, n / div])
    return list(set(result))
Run Code Online (Sandbox Code Playgroud)

python list-comprehension one-liner

3
推荐指数
1
解决办法
102
查看次数

perl 命令行单行查找/替换,但*不*打印不匹配的行?

我想用复杂的正则表达式在命令行上的文件上做一个正则表达式查找和替换,所以我需要 PCRE 和正在使用perl -pe "s/foo/bar"(而不是sed),它在应用后打印出所有行s///,但它也打印不比赛。

是否有一个perl命令行单行不会打印不匹配的行?我知道perl -pe s/foo/bar/ if /foo/,但后来我需要复制正则表达式。有没有可能不重复我自己?

regex perl command-line one-liner

2
推荐指数
1
解决办法
187
查看次数

列表理解可以分为两个列表吗?

我想我已经明白了单行 for 循环的想法,但现在我遇到了问题。我知道我可以使用以下方式定义数据框列:

df = pd.DataFrame(columns=["columnA"])

list = [0, 1, 2, 3, 4]

df["columnA"] = [i for i in list]
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:是否可以在一行 for 循环中定义 2 列?

我试过这个:

df["columnA"], df["columnB"] = [i, i**2 for i in list]
df["columnA"], df["columnB"] = [[i, i**2] for i in list]
Run Code Online (Sandbox Code Playgroud)

这些都不起作用。我正在使用Python 3.10

python list-comprehension dataframe pandas one-liner

2
推荐指数
1
解决办法
126
查看次数