gpt4 book ai didi

linux - 使用具有模式映射的外部文件替换模式后的行

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:00 26 4
gpt4 key购买 nike

我正在寻找 shell 脚本,它将替换文件中由常量模式和变量模式组成的几千行之后的行。模式映射在外部文件中。

源/目标文件abc.txt有这样的形状:

something not to be changed
123: aaa
bla bla

something else
123: abc
bla bla

And something more
123: ccc
bla bla

模式映射文件pat.txt有这样的形状:

abc pattern     xyz
aaa pattern xxx
ccc pattern zzz

现在我需要换行

bla bla

到正确的模式,即 123 之后的行:abc 应该更改为 xyz

我知 Prop 体步骤,例如:匹配模式后换行

sed '/abc/!b;n;c/xyz' abc.txt

或在模式前显示行:

grep -B1 "bla bla" abc.txt

或在数学模式后显示线条:

grep -A1 "123" abc.txt

或从 pat.txt 返回模式映射的其余部分

grep "abc" pat.txt | sed -n -e 's/^.*pattern  //p'

但我不知道如何将其组合在一起。任何帮助,将不胜感激。谢谢。

最佳答案

首先,要将整行更改为固定字符串,我更喜欢 s 而不是 c,如下所示:

/abc/{n;s/.*/xyz/;}

只是因为 c 对换行如此挑剔(至少在我的 sed 版本中)。如果您愿意,请使用 c

所以这是我们需要的 sed 脚本:

/^123: abc$/{n;s/.*/xyz/;}
/^123: aaa$/{n;s/.*/xxx/;}
/^123: ccc$/{n;s/.*/zzz/;}

我的方法是通过另一个 sed 命令将您的 pat.txt 转换成该脚本:

sed 's|^\([^ ]*\) pattern *\(.*\)$|/^123: \1$/{n;s/.*/\2/;}|' pat.txt 

关于linux - 使用具有模式映射的外部文件替换模式后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57349416/

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