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

Replacing string in a specific position between known delimiters in shell

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

ID;Name;Surname;Country

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

有点像

的结果

grep -n "ID" [file] | cut -d ";" -f [position]

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

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

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

使用 awk:

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

输出:

ID;Data1;foo;Data3