gpt4 book ai didi

perl - 如何仅在您指定的某个任意字段上进行正则表达式替换

转载 作者:行者123 更新时间:2023-12-01 00:46:16 26 4
gpt4 key购买 nike

我喜欢 awk 的地方在于,您可以从满足您指定的任意字段条件的文件中获取所有行。例如,

awk '$3~/hi/' < test.txt # print all lines where the third field matches the pattern "hi"

awk '$2>=2' < test.txt  # print all lines where the second field is greater or equal to 2

作为一个正在学习 unix 强大功能的初学者,我对此非常着迷。现在我想知道是否有一种简单的方法可以仅在您指定的某些任意字段上执行正则表达式替换?例如,我只想对第三个字段进行正则表达式替换。我目前的方法是“剪切”我想要的字段并使用 perl 或 sed 对其进行替换,然后我将其“粘贴”到原始文件。但我想知道是否有更有效的方法来实现这一目标。

谢谢

最佳答案

由于您用“perl”标记了这个问题(除了“sed”、“awk”、“unix”和“命令行”),我假设您对包含以下任何内容的答案感兴趣以上工具。

Perl 有一个自动拆分命令行开关(-a):

perl -lane 'print if $F[2] =~ /some pattern/' filename

……或者……

perl -lane 'print if $F[1] >= 42' filename

-a 导致自动拆分为 @F 数组。 -n 使 Perl 遍历您提供给它的文件的行。剩下的就是编程了。 ;)

现在替换:

perl -i.bak -lane '$F[2] =~ s/match/subst/; print join q/ /, @F' filename

或者,使用 -p 开关稍微短一点,它告诉 Perl 打印出现在 $_ 中的每一行。这意味着如果您更改 @F,则必须将其复制回 $_:

perl -i.bak -pale '$F[2] =~ s/match/subst/ && $_="@F"' filename

关于perl - 如何仅在您指定的某个任意字段上进行正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10714232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com