我有一个看起来像这样的数据集:
1099511629352|Nunez|Jorge|female|17/11/2000|2011-04-04T05:54:52.693+0000|201.221.59.59|Opera|Facebook
在这种情况下,列分隔符为|
->我想使用sed替换给定一行ID的第N列($pos
)。
这是我现在想出的:
找到正则表达式[$columnsep]*[a-zA-Z0-9./\-:+]+
以给定$id
$columnsep$editvalue
替换出现的情况因此适当的sed命令为:
sed "/^$id/[$columnsep]*[a-zA-Z0-9./\-:+]+/$columnsep$editvalue/$pos}" $file
我得到[a- ...": invalid command code [
,尽管它可以与https://regexr.com/之类的在线正则表达式测试器一起使用
答案 0 :(得分:1)
除非$columnsep
超过一个字符,否则类似的事情将完成工作。
sed "/^$id/s/[$columnsep]*[^$columnsep]*/$columnsep$editvalue/$pos" "$file"
但是,我建议将awk用于此类任务
awk -F "$columnsep" -v OFS="$columnsep" -v id="$id" -v editvalue="$editvalue" -v pos="$pos" '
($1==id){$pos=editvalue}1' "$file"