【问题标题】:Replace Numbers with Sed, Change a list of number say 1 to a 1000 with may duplicate numbers But only 1 not 11 or 2 but not 22用 Sed 替换数字,将数字列表更改为 1 到 1000 可能重复的数字但只有 1 不是 11 或 2 但不是 22
【发布时间】:2021-03-07 23:24:21
【问题描述】:

我想更改以下可能长达数千行的文本列表。

目标是将 NET1 更改为 NET66 但仅在具有 Net1 的 12 行上,但不更改 NET10、NET11、NET12、NET13 或任何包含 NET1### 的行。

我正在尝试使用

sed -i s/NET1/NET66/g list 

但是它改变了所有行中有一个 NET1 的行(NET10 更改为 NET660) 感谢您的帮助。

317NET1             1          M      A01X+004115Y+016850X0280Y         S0                                                                                                                            
017NET1             2                 A04X+004115Y+016850X0280Y         S0                                                                                                                            
017NET1                         D0160PA00X+004115Y+016850               S0                                                                                                                            
317NET1             3          M      A01X+004500Y+033650X0280Y         S0                                                                                                                            
017NET1             4                 A04X+004500Y+033650X0280Y         S0                                                                                                                            
017NET1                         D0160PA00X+004500Y+033650               S0                                                                                                                            
317NET2             5          M      A01X+004405Y+020600X0280Y         S0                                                                                                                            
017NET2             6                 A04X+004405Y+020600X0280Y         S0                                                                                                                            
017NET2                         D0160PA00X+004405Y+020600               S0                                                                                                                            
327NET2             7                 A01X+005010Y+020585X0560Y0220     S0                                                                                                                            
317NET3             8          M      A01X+004405Y+021100X0280Y         S0                                                                                                                            
017NET3             9                 A04X+004405Y+021100X0280Y         S0                                                                                                                            
017NET3                         D0160PA00X+004405Y+021100               S0                                                                                                                            
327NET3             10                A01X+005010Y+021085X0560Y0220     S0                                                                                                                            
317NET4             11         M      A01X+003408Y+026300X0500Y         S0                                                                                                                            
017NET4             12                A04X+003408Y+026300X0500Y         S0                                                                                                                            
017NET4                         D0340PA00X+003408Y+026300               S0             
317NET1             36                A01X+005615Y+024105X0280Y         S0                                                                                                                            
017NET1             37         M      A04X+005615Y+024105X0280Y         S0                                                                                                                            
017NET1                         D0160PA00X+005615Y+024105               S0                                                                                                                            
327NET10            38                A01X+005010Y+024085X0560Y0220     S0                                                                                                                            
317NET10            39                A01X+012305Y+019060X0280Y         S0                                                                                                                            
017NET10            40         M      A04X+012305Y+019060X0280Y         S0                                                                                                                            
017NET10                        D0160PA00X+012305Y+019060               S0                                                                                                                            
327NET10            41                A01X+012620Y+018218X0120Y0720     S0                                                                                                                            
317NET10            42                A01X+013105Y+033405X0280Y         S0                                                                                                                            
017NET10            43         M      A04X+013105Y+033405X0280Y         S0                                                                                                                            
017NET10                        D0160PA00X+013105Y+033405               S0                                                                                                                            
327NET10            44                A01X+012505Y+033400X0560Y0220     S0                                                                                                                            
317NET11            45                A01X+005600Y+024600X0280Y         S0                                                                                                                            
017NET11            46         M      A04X+005600Y+024600X0280Y         S0                                                                                                                            
017NET11                        D0160PA00X+005600Y+024600               S0                                                                                                                            
327NET11            47                A01X+005010Y+024585X0560Y0220     S0                                                                                                                            
317NET11            48                A01X+002208Y+025300X0500Y         S0                                                                                                                            
017NET11            49         M      A04X+002208Y+025300X0500Y         S0                                                                                                                            
017NET11                        D0340PA00X+002208Y+025300               S0                                                                                                                            
317NET11            50                A01X+013105Y+033890X0280Y         S0                                                                                                                            
017NET11            51         M      A04X+013105Y+033890X0280Y         S0                                                                                                                            
017NET11                        D0160PA00X+013105Y+033890               S0                                                                                                                            
327NET11            52                A01X+012505Y+033900X0560Y0220     S0                                                                                                                            
317NET11            53                A01X+004505Y+018850X0280Y         S0                                                                                                                            
017NET1             54         M      A04X+004505Y+018850X0280Y         S0                                                                                                                            
017NET1                         D0160PA00X+004505Y+018850               S0                                                                                                                            
317NET12            55         M      A01X+004365Y+025105X0280Y         S0                                                                                                                            
017NET12            56                A04X+004365Y+025105X0280Y         S0                                                                                                                            
017NET12                        D0160PA00X+004365Y+025105               S0                                                                                                                            
327NET1             57                A01X+005010Y+025085X0560Y0220     S0                                                                                                                            
317NET13            58         M      A01X+004365Y+025600X0280Y         S0                                                                                                                            
017NET13            59                A04X+004365Y+025600X0280Y         S0                   

【问题讨论】:

  • 欢迎来到 SO,请在您的问题中以代码的形式添加您的努力,这在 SO 上受到强烈鼓励。
  • 我试图使用 Sed -i s/NET1/NET66/g list 但它改变了所有行中有一个 NET1 的行(NET10 更改为 NET660)
  • 我可能已经用 sed s/NET1[[:space:]]/NET66/g zz 弄明白了
  • 请检查下面的答案,如果有效,请接受/upvote。

标签: sed replace numbers


【解决方案1】:

使用awk:

awk '{sub(/NET1$/, "NET66", $1)}1' file > outfile

即删除第一个字段末尾的NET1,然后打印记录。

或者sed:

sed -i 's/^\([0-9]*\)NET1\([[:space:]]\)/\1NET66\2/' file

^\([0-9]*\)NET1\([[:space:]]\) 仅匹配行开头的数字之后的NET1,并且该数字后跟一个空白字符。 \1\2 是占位符,用于还原结果中捕获的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2018-07-23
    • 2021-11-08
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多