gpt4 book ai didi

linux - 仅返回匹配模式之后的行部分

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:37 27 4
gpt4 key购买 nike

我需要帮助来处理命令,其中它是一个 * (星号)分隔文件,具有多行,如下所述。我想搜索以 NM1*IL 开头的行并提取最后一列。下面是显示的示例。

$ cat temp.txt
NM1*IL*1*RESTAR*FRENNY*M***MI*99358358~
N3*2164 Boeing Avenue~
N4*NEW DELHI*CA*94114~
DMG*D0*19550610*F~
NM1*PR*2*KFHP*****PI*94135~
NM1*IL*1*STAR*FRENY*M***MI*99358958~
NM1*IL*1*RESTA*ANNIE*M***MI*993583589~

我想要如下的输出

99358358
99358958
993583589

最佳答案

grep 'NM1[*]IL' temp.txt | awk -F'*' '{print $NF}' | sed 's/~$//'

您可以运行此管道的部分内容(最多但不包括 |)来查看特定命令对您的输入执行的操作。

grep 'NM1[*]IL' — 过滤输入行,以便仅留下与此模式匹配的行。 grep 采用正则表达式作为其参数,而 * 是一个特殊的正则表达式字符(表示其后面的 0 个或多个符号),因此需要转义。我在这里使用了字符类 ([]),因为我认为它很简洁。可以使用 NM1\*IL 达到相同的效果。

awk -F'*'-F 指定字段分隔符,我将其设置为 *。 awk 将每个输入行拆分为字段,因此两个 * 之间的任何内容都是 awk 的字段。

'{print $NF}' 是现在将在其输入上执行的 awk 程序。它表示“对于所有输入行,打印带有编号 NF 的字段”,其中 NF 是一个特殊的 awk 变量,它代表“字段数量”。所以它所做的就是打印最后一个字段。

sed 's/~$//' — 只需删除尾随的 ~$ 表示行尾。因此,此 sed 将 EOL 前面的任何 tildas 替换为空字符串。可以写成 tr -d '~',但这个 sed 更精确(仅在 EOL 之前删除 tildas)。

grep(1) , awk(1p) ,和sed(1)都是标准 UNIX 命令行实用程序。研究手册页以获取有关如何使用它们的更多信息。

关于linux - 仅返回匹配模式之后的行部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846277/

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