【问题标题】:Replacing string in a specific position between known delimiters in shell替换shell中已知分隔符之间特定位置的字符串
【发布时间】:2017-03-17 13:32:15
【问题描述】:

我有一个以这种格式存储数据的文件

ID;Name;Surname;Country

而且我需要能够查找和替换特定的数据,只知道使用“;”的数据的 ID 和位置作为分隔符。

有点像

的结果

grep -n "ID" [文件] |剪切 -d ";" -f [位置]

但是用用户给定的字符串替换而不是显示

我认为我需要使用 sed,但我发现没有任何效果。

编辑:用户将从一个菜单中选择要修改的内容并提供 ID,然后提示他们输入替换字符串并了解存储数据的结构(ID/姓名/姓氏/ Country) 字符串将在文本文件中相应地替换。

【问题讨论】:

    标签: shell unix awk sed vi


    【解决方案1】:

    使用 awk:

    echo 'ID;Data1;Data2;Data3' | awk -v id="ID" -v col=3 -v repl="foo" -F';' 'BEGIN{OFS=";";} $1==id {$col=repl;}1'
    

    输出:

    ID;Data1;foo;Data3

    【讨论】:

    • 谢谢,我应该将整个内容重定向到文件以使其永久化还是有更清洁的方法?
    • 我建议将其输出重定向到一个文件:awk ... > new_file
    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多