小编Kir*_*ira的帖子

shell globbing 中的匹配零个或多个运算符

我在这里遇到了一个非常微不足道的问题:如何使*bash 中的符号表示零或更多,就像在诸如sed? 之类的工具中一样?

例如,ak*应该匹配名称完全由a后跟零个或多个ks组成的任何文件。它的扩张将包括aakakk,和akkk,但不会akc

我已经unsetopt sh_glob在 zsh 和set -o noglobbash 中尝试过;他们没有产生预期的行为。

shell regular-expression wildcards

10
推荐指数
2
解决办法
8901
查看次数

sed \{x,y\} 范围是否贪婪?

例如,我想知道\{x,y\}insed是否会尝试匹配尽可能多或尽可能少的字符。

另外,有人可以向我解释以下意外行为sed吗?

echo "baaab" | sed 's/a\{1,2\}//'
bab

echo "baaab" | sed 's/a\{0,2\}//'
baaab
Run Code Online (Sandbox Code Playgroud)

在第一行中,sed变得贪婪,在第二行中显然没有,这有什么原因吗?

我使用的是 GNU sed 4.2.1 版。

sed regular-expression

6
推荐指数
2
解决办法
1960
查看次数

通过管道以交互方式使用 awk

看着这个问题,我注意到awk如果文件被传送到标准输入,则无法读取用户输入,但如果从作为命令行参数给出的文件中读取输入,它的行为确实符合预期。

例如,如果您的awk脚本中有以下 BEGIN 块:

BEGIN {
    printf "Enter input: "
    getline var < "-"
}
Run Code Online (Sandbox Code Playgroud)

如果你像 一样运行它awk -f ./script.awk file.txt,它会提示用户输入,然后继续处理file.txt。但是,如果您像 一样运行cat file.txt | awk -f ./script.awk,我想 awk 会将它从管道中获取的内容解释为用户的输入(因此getline将填充var的第一行file.txt)。

有没有办法让awk行为就像从文件中读取一样,但在管道中使用?

我可以使用临时文件,当然,但这远不优雅。

shell pipe awk

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

字符串数字正则表达式替换

我对这个替换正则表达式有点挣扎,我不明白它为什么会这样。我想要做的是替换最后一个之后的所有数字/

str="aa/a0b0/42"
echo ${str/%[[:digit:]]*/5}
echo ${str/%[0-9]*/5}
Run Code Online (Sandbox Code Playgroud)

两者都作为输出echo产生aa/a5。预期的输出将是aa/a0b0/5

我很清楚我可以使用诸如sed和 之类的工具awk来解决我的问题,而且我确实知道该怎么做,但我正在寻找一种仅使用 bash 的解决方案。

我想了解为什么[0-9]*扩展到 0b0/42 而不仅仅是数字。

%在我的正则表达式是让后端更换

shell bash regular-expression

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

图案高亮命令

伙计们,我想知道是否存在只突出显示输入文本的某些部分的命令,而不是像grep这样过滤它。

举个例子,假设以下输入文本:

foo bar
gaz das
xar
Run Code Online (Sandbox Code Playgroud)

grep "bar\|gaz" input将打印前两行,突出显示bargaz,但不会显示xar

我知道我可以简单地为-C参数设置一个大常量,因此它会“始终”显示上下文,例如: grep -C1000 "bar\|gaz" input,但我不确定这是否有效,或者是否有更好的工具。

command-line grep highlighting

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

使用 ip 工具显示网络掩码

我想知道如何获取网络接口的掩码。用ifconfig它很简单,但我必须使用该ip工具,并且ip addr show没有向我展示我想要的东西。

下面是一个输出示例ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

另外,那个 brd 字段是什么?

ip network-interface

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