gpt4 book ai didi

linux - 使用通配符搜索并在同一行替换

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

我正在尝试使用以下通用格式编辑大型文本文件:

ID=id1;Name=name1
ID=id2;Name=name2;Note= sometext2 ~X0A1D5PFF5 othertext2;
ID=id3;Name=name3;Note= sometext3 ~Q87362 othertext3;
ID=id4
ID=id5;Note= sometext5 ~G1NYZ3 othertext5;
ID=id6;Name=name6;Note= sometext6 ~M1C0K5 othertext6;
ID=id7
...

我的目标是生成一个具有相同行顺序的文件,但对于包含带有 ~ 前缀的字符串的行,将同一行上的 ID 替换为该字符串(同时去除波浪号)。不包含 ~ 字符串的行应该按原样打印。即,产生这个:

ID=id1;Name=name1
ID=X0A1D5PFF5;Name=name2;Note= sometext2 ~X0A1D5PFF5 othertext2;
ID=Q87362;Name=name3;Note= sometext3 ~Q87362 othertext3;
ID=id4
ID=G1NYZ3;Note= sometext5 ~G1NYZ3 othertext5;
ID=M1C0K5;Name=name6;Note= sometext6 ~M1C0K5 othertext6;
ID=id7
...

到目前为止,我一直在尝试使用 sedawk,但我似乎无法正确使用正则表达式...

感谢您的任何建议。

最佳答案

使用正则表达式组:

sed -E 's/^ID=[[:alnum:]]+;(.*)~([[:alnum:]]+) /ID=\2;\1~\2 /' file > file.modified
  • -E - 使用扩展正则表达式
  • ^ID=[[:alnum:]]+ 匹配现有 ID
  • (.*)~ - 匹配 ~
  • 之前的所有内容
  • ([[:alnum:]]+) - 匹配 ~
  • 之后的字母数字标记
  • ID=\2;\1~\2 - 引用正则表达式组的替换字符串

输出:

ID=id1;Name=name1
ID=X0A1D5PFF5;Name=name2;Note= sometext2 ~X0A1D5PFF5 othertext2;
ID=Q87362;Name=name3;Note= sometext3 ~Q87362 othertext3;
ID=id4
ID=G1NYZ3;Note= sometext5 ~G1NYZ3 othertext5;
ID=M1C0K5;Name=name6;Note= sometext6 ~M1C0K5 othertext6;
ID=id7

关于linux - 使用通配符搜索并在同一行替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46596423/

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