如何使用sed -i编辑变量模式?

Yi Jie Tseng

我正在使用sed编辑文件中的某些数据。我感兴趣的模式是这样的:

XXXA
YYYA
ZZZA

我只是想\t在A及其前面的内容之间添加一个a 因此它将看起来像这样:

XXX A
YYY A
ZZZ A

因为XYZ在每个文件中都不相同,所以我不想对每个文件进行sed数千次。因此,我认为我可以...用作表示A前面任何内容的模式。

所以我这是我尝试过的:

sed -i 's/...A/...\tA/' myfile.txt

但它改变了XXXA, YYYA, ZZZA"... A", "... A", "... A"所以我想知道有什么方法可以使用sed来做到这一点,并且让任何东西都保持A不变吗?

非常感谢帮助

亚伦

您需要捕获3个字符并在替换模式中使用向后引用:

sed -Ei 's/(...)A/\1\tA/' myfile.txt

在此命令中,()围绕搜索模式的一部分定义了一个捕获组,您可以在搜索模式中确保内容在两个位置上相同,或者在替换模式中可以引用其内容,以便重复您所匹配的部分。

\1替换模式中in是对第一个捕获组(在我们的情况下,我们定义的唯一捕获组)的引用。

我使用-ERE regex样式是为了避免不必逃避分组括号,但sed -i 's/\(...\)A/\1\tA/' myfile.txt这样做是等效的。

另外,您可能需要添加锚点,以确保替换整行而不是碰巧包含A三个其他字符的行的一部分

sed -Ei 's/^(...)A$/\1\tA/' myfile.txt

您可以在这里尝试

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章