替换shell中已知分隔符之间特定位置的字符串

时间:2016-11-03 20:12:09

标签: shell unix awk sed vi

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

ID;Name;Surname;Country

我需要能够找到并替换特定的数据,只需知道数据和数据的位置使用&#39 ;;'作为分隔符。

有点像

的结果
  

grep -n" ID" [档案] | cut -d";" -f [位置]

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

我认为我需要使用sed,但我发现的任何东西都没有用。

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

1 个答案:

答案 0 :(得分:2)

用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