gpt4 book ai didi

regex - 结合 awk 和 sed 来匹配行和替换字符

转载 作者:行者123 更新时间:2023-12-03 21:31:43 28 4
gpt4 key购买 nike

我正在尝试匹配第一个字母,在此示例中为“B”,第二列为“2”。找到匹配项后,将字符 [38-41] 替换为空格。

这是我要修改的数据:

A1234A123 1 2 12345.12345 1234.1234.112341234

B1234A123 2 2 12345.12345 1234.1234.112341234

A1234A123 2 2 12345.12345 1234.1234.112341234

我可以使用 awk 匹配条件:

awk '/^B/ && $2=="2" {print}' 

我可以使用 sed 修改行:

sed -r 's/^(.{37})(.{4})/\1    /' 

我试图在文件中找到包含这两个条件的行,然后修改字符,同时仍然打印整行不匹配的行。你能否结合这两个命令来引入某种 if/then 语句?

我尝试组合这些命令,但它编辑了所有行:

awk '/^B/ && $2=="2" {print}' ¦ sed -r 's/^(.{37})(.{4})/\1    /' data

结果数据应该是这样的:

A1234A123 1 2 12345.12345 1234.1234.112341234

B1234A123 2 2 12345.12345 1234.1234.1 1234

A1234A123 2 2 12345.12345 1234.1234.112341234

提前致谢。

最佳答案

您可以使用单个 awk 来组合这两个命令:

awk '/^B/ && $2=="2"{$0=substr($0, 1, 37) "    " substr($0, 38, 4)} 1' file
A1234A123 1 2 12345.12345 1234.1234.112341234
B1234A123 2 2 12345.12345 1234.1234.1 1234
A1234A123 2 2 12345.12345 1234.1234.112341234

关于regex - 结合 awk 和 sed 来匹配行和替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20822944/

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