【问题标题】:Replacing the last column in a unix file with another value用另一个值替换 unix 文件中的最后一列
【发布时间】:2023-03-18 01:57:01
【问题描述】:

我想使用 vim 编辑器或 sed 命令将最后一列的值替换为另一个值。我尝试了以下命令,但它有时会替换我第二列中已经存在的数据。

:%s/,3/,2/

我的样本数据:

410339,166,1430,3
410340,112,1840,3
410341,109,1315,3
410342,123,1435,3
410343,230,3200,3
410344,857,36975,3
410345,125,4440,3
410346,105,1460,3
410348,122,1150,3
410349,314,2380,3
410350,132,4650,3
410351,136,7465,3
410352,103,1775,3
410353,101,1095,3
410354,101,1360,3

【问题讨论】:

    标签: unix vim replace sed


    【解决方案1】:

    您需要表明您想要换行符:

    :%s/,3$/2/
    

    【讨论】:

      【解决方案2】:

      要完成您在 Vim 中的尝试,只需使用 $ 将匹配的表达式锚定到行尾即可。

      :%s/,3$/,2/
      

      生产:

      410339,166,1430,2
      410340,112,1840,2
      410341,109,1315,2
      410342,123,1435,2
      410343,230,3200,2
      410344,857,36975,2
      410345,125,4440,2
      410346,105,1460,2
      410348,122,1150,2
      410349,314,2380,2
      410350,132,4650,2
      410351,136,7465,2
      410352,103,1775,2
      410353,101,1095,2
      410354,101,1360,2
      

      【讨论】:

      • 当模式被锚定到行尾时,全局标志的意义是什么?
      【解决方案3】:

      我会使用awk:

      awk '{$NF=2}1' FS=, OFS=,
      

      这无条件地使最后一列的值为 2。如果所需的替换是字符串,则需要使用引号或更灵活的:

      awk '{$NF=r}1' FS=, OFS=, r="the string to put in the last column"
      

      您可以将替换限制为值为 3 的列:

      awk '$NF==3{$NF=r}1' FS=, OFS=, r="the string to put in the last column"
      

      而且,要在 vim 中执行此操作,只需执行以下操作:

      :%! awk ...
      

      【讨论】:

        【解决方案4】:

        GNU sed:

        如果最后一列只有“3”:

        sed -i 's/3$/2/' file
        

        如果最后一列可能类似于“13”:

        sed -i 's/,3$/,2/' file
        

        -i 标志:

        -i[SUFFIX], --in-place[=SUFFIX]
            edit files in place (makes backup if extension supplied)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-12
          • 2021-04-18
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多