【问题标题】:sed/awk replace word in specific position of sentencesed/awk 替换句子特定位置的单词
【发布时间】:2011-08-12 22:11:29
【问题描述】:

我正在尝试替换一行特定位置的单词

例如,给定:

INSERT INTO address (city_id,city) VALUES (1,'Monrovia');
INSERT INTO address (city_id,city) VALUES (2,'Brunswick');
INSERT INTO address (city_id,city) VALUES (3,'Phenix City');

我想用“底特律”替换所有不同的城市,结果是:

INSERT INTO address (city_id,city) VALUES (1,'Detroit');
INSERT INTO address (city_id,city) VALUES (2,'Detroit');
INSERT INTO address (city_id,city) VALUES (3,'Detroit');

请问,我如何在 sed、awk 或 vim 中做到这一点?

谢谢。

【问题讨论】:

    标签: regex shell unix sed awk


    【解决方案1】:

    嗯?这很简单:

    $ echo "INSERT INTO address (city_id,city) VALUES (1,'Monrovia');
    > INSERT INTO address (city_id,city) VALUES (2,'Brunswick'); 
    > INSERT INTO address (city_id,city) VALUES (3,'Phenix City');" | 
    > sed "s/'[^']*'/'Detroit'/g"
    INSERT INTO address (city_id,city) VALUES (1,'Detroit'); 
    INSERT INTO address (city_id,city) VALUES (2,'Detroit'); 
    INSERT INTO address (city_id,city) VALUES (3,'Detroit');
    

    干杯。基思。

    【讨论】:

    • 我猜测 '句子中的特定点' 实际上是出于某种原因提供的(即使示例没有显示该原因)
    • 我选择相信发帖者显然不是以英语为母语的人,因此不知道他实际上在说什么......所以我采取了最简单(最常见)的解释:他只是对正则表达式一无所知。
    • @user380690:那么问题解决了吗?如果是这样,则将此响应标记为正确。这告诉其他用户不要打扰回答,也告诉任何将来发现这篇文章的人(那些有类似问题的人,知道如何使用谷歌)这个假设的解决方案实际上是一个解决方案。
    【解决方案2】:

    最简单:保留脚本,追加

    UPDATE address SET city ='Detroit'
    

    在 vim 中:

    :g/^INSERT INTO address/normal f;F'ci'Detroit
    

    在 sed 中:

    sed "s/\(VALUES (.*,\)'.*\?'/\1'Detroit'/g"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2022-11-24
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多