我的文件如下:
invoice;123;456
invoice;789;012
total;912;468
我需要“如果第一个字段以”total“开头,则在第三个字段中输入”,所以我可以得到:
invoice;123;456
invoice;789;012
total;912;0
我熟悉sed sintax,但使用字段远非我的能力。可能awk更方便......
谢谢!
答案 0 :(得分:4)
awk 'BEGIN {FS = ";"; OFS=";"; } $1 ~ /^total/ { $3 = 0 } 1'
FS
是输入字段分隔符,OFS
是输出字段分隔符。
$1
是第一个字段,我们检查它是否以total
开头;如果是这样,我们将第三个字段设置为0。
1
始终为true,它会导致打印行。
答案 1 :(得分:2)
sed solution
sed -e 's/\(total;[0-9]\+;\)[0-9]*\(;*\)/\10\2/g' <file>
而不是-e
,-i
将更改文件本身。
第一组\(...)\
内的任何内容实际上是第一个字段,它会在\1
被替换,然后[0-9]*
是任何数字,由0
取代,然后在最后\(;*\)
表示如果存在任何其他字段,请将其替换为\2
答案 2 :(得分:1)
这是一个sed
解决方案
sed -i 's/\(^total;.*;\)\(.*\)/\10/g' file
(^total;.*;)(.*) -> (First group matches until the second semicolon)(Second group matches rest)
\10 -> Replacement is \1 (first group) + 0 (zero)