在shell中的某个位置替换两个分隔符shell之间的字符串



如何替换两个分隔符之间的字符串?

在字符串用"0"分隔的一行中&",我想用另一个字符串($new_value)替换第三个位置的字符串第三位置的字符串可以在同一行中多次出现,但只能在第三位置中更改

我试过

echo $laligne | awk -v repl=${new_value} -F ";" '{ printf("%s;%s;%s;%s;%s",$1,$2,repl,$4,$5)}' >> file.txt

old_value=`echo $line | awk '{split($0,a,";");print a[3]}'`
echo $laligne | awk -F ";"  '{gsub($old_value,$new_value,$3)}1' OFS=";" >> file.txt  

当检查文件内容时,我发现行没有改变

你能帮忙吗?

假设:

  • 想要更改所有行中的字段#3(假设此代码可以应用于包含多行的;分隔文件)
  • 不知道一行中可能存在多少字段

使用awk解决方案,我们只需将字段#3($3)替换为新值:

$ laligne='a;b;c;d;e;f'
$ awk -v repl='new_value' 'BEGIN {FS=OFS=";"} {$3=repl; print}' <<< "${laligne}"
a;b;new_value;d;e;f

元素用"分隔"所以regexp">[^;]+";将把它们交给我们,我们需要3rd:

$ echo "1  ;2    ;3   ;4   ;5   ;6   " | sed "s/[^;]+/replace/3"
1  ;2    ;replace;4   ;5   ;6

最新更新