- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在新的 macOS 上找到所有事件的网络接口(interface)。这意味着以下带有 pcregrep
的单行代码将不起作用:
ifconfig | pcregrep -M -o '^[^\t:]+(?=:([^\n]|\n\t)*status: active)'
因为 pcregrep
在 macOS 上没有默认安装。
我试图将它翻译成 egrep
但无济于事,因为不可能进行积极的前瞻,对吧?
所以我尝试在 perl 中使用单行代码。但是以下命令不起作用,因为开关 -pe
没有同时吞噬所有行。我也尝试过 -p0e
。
ifconfig | perl -pe 'while (<>) {if (/^[^\t:]+(?=:([^\n]|\n\t)*status: active)/){print "$1";};}'
如果我用正面前瞻性搜索同一行,它就可以工作;例如:
ifconfig | perl -pe 'while (<>) {if (/^([^\t:]+)(?=:([^\n]|\n\t)*mtu 1380)/){print "$1";};}'
utun0
ifconfig
的典型输出:
en10: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6467<RXCSUM,TXCSUM,VLAN_MTU,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether 00:e0:4c:68:01:20
inet6 fe80::1470:31b9:a01c:6f5e%en10 prefixlen 64 secured scopeid 0xd
inet 192.168.178.39 netmask 0xffffff00 broadcast 192.168.178.255
inet6 2003:ee:4f1a:ce00:864:f90c:9a11:6ad9 prefixlen 64 autoconf secured
inet6 2003:ee:4f1a:ce00:d89a:7e34:6dd4:1370 prefixlen 64 autoconf temporary
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (1000baseT <full-duplex>)
status: active
预期的结果是:
en10
我在 macOS Monterey、zsh 和 perl 5.34 上
谢谢你的帮助
马可
最佳答案
由于ifconfig
正常输出†每个接口(interface)都有多行文本 block ,全部用空行分隔,方便分段阅读(-00) .那么剩下的就简单很多
ifconfig -a | perl -00 -nE'say $1 if /^(.+?)\s*:.*?status:\s+active/s'
我们仍然需要 /s
修饰符,使 .
也匹配一个换行符,因为每个段落本身都是一个多行字符串,模式需要跨多行匹配.
† 除了它不在用于此问题的 MacOS 上——没有空行分隔接口(interface) block 。那么寻找段落是没有意义的(在换行符上换行不是)并且这个答案不适用于该系统。
这是一个经典的逐行方法——在该接口(interface)输出的第一行设置接口(interface)名称(行首没有空格),然后测试事件状态
perl -wnE'$ifn=$1, next if /^(\S[^:]+?)\s*:/; say $ifn if /status:\s+active/' file
这允许在接口(interface)名称中使用空格,这是不太可能的(甚至可能不允许)。对于不允许在名称中使用空格的更具限制性的模式,请使用 /^(\S+?)\s*:/
(或更高效的 /^([^:\s]+)/
). \s*
和前面的 ?
只是为了让它不捕获尾随空格(就在 :
之前),如果可能的话.
这也适用于界面 block 之间有空行的情况。
关于perl - 将 pcregrep 翻译成 Perl 一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71638153/
我有很多格式如下的文件: SIMPLE { residualControl { p 1e-4; U
我正在使用 pcregrep 搜索多行模式,我只希望 pcregrep 搜索具有特定文件扩展名的文件,即 pcregrep -Mrl --include=*.sv -e '' /path/to/sea
pcregrep 中的 -oX 选项有问题。指定多个具有不同编号的此类选项仅输出最后指定的捕获组。 数据: docker | awk '{print $1}' |尾-n +2 | xargs dock
我在文本文件中有以下模式。 ###################### # ADD=123 New Comment ###################### if ($ADD==123) 除此之
pcregrep 中是否有任何选项允许我只打印一次匹配的字符串模式?我开始了解选项--match-limit。但 pcregrep 不识别此选项。是否有任何特定版本支持此选项。 我假设 --match
这是我在这里的第一篇文章,这是个好地方,对我帮助很大! 所以我正在使用 pcregrep,我想用我的 pattens 捕获文件。我正在为正则表达式使用变量,例如: test="'.', ){20,}.
我试图从 pcregrep 的搜索结果中排除多个目录: pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha
我在日志文件中有 xml,看起来像: 1 text text text 2 text 所以,我需要从日志文件中删除这个 XML,我正在尝试这样做: pcregrep -M '(\n|.)*'
我正在尝试使用 pcregrep -M 来搜索多行字符串。 这是我脚本中的一行: lineNumber=$(pcregrep -Mn '$firstLine.*\n.*$secondLine.*' $
我正在尝试使用 this SO question 的最佳答案中指定的 pcregrep在 Cygwin 上。我的环境是运行 Cygwin V 1.7.20(0.266/5/3) 的 Win7 64 位
我编写了一个简单的正则表达式,与 pcregrep 一起使用以返回摆动文件中的给定染色体(见下文)。 pcregrep -M '^fixedStep chrom=2.*\n[0-9\n]*' inp
我需要在新的 macOS 上找到所有事件的网络接口(interface)。这意味着以下带有 pcregrep 的单行代码将不起作用: ifconfig | pcregrep -M -o '^[^\t:
我有多个文本文件中的数据,如下所示: 1 DAEJ X -3120041.6620 -3120042.0476 -0.3856
我需要在新的 macOS 上找到所有事件的网络接口(interface)。这意味着以下带有 pcregrep 的单行代码将不起作用: ifconfig | pcregrep -M -o '^[^\t:
我需要抓取最后一次匹配ENTRY之后的内容到文件末尾,我好像做不到。它可以是多行,数据可以包括文件末尾的任何字符,包括 (,\n, )。 我试过: tail -1 file # doesn’t wor
我有一个与 pcregrep 完美配合的正则表达式: pcregrep -M '([a-zA-Z0-9_&*]+)(\(+)([a-zA-Z0-9_ &\*]+)(\)+)(\n)(\{)' 现在我尝
我有这个文本文件 AAAA 1234 title example Lorem Ipsum FF AAAA 1234 title example €330 - Roma FF 我只想从此文件中提取以下文
我正在尝试在 Ubuntu 上安装 PCRE-8.35。我的问题类似于 this guy's 。我正在遵循相同的教程,但我的问题源于他的命令。当我尝试安装时,我收到此错误消息:** 无法 --enab
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是一名优秀的程序员,十分优秀!