我使用while循环将行拆分为变量,并在循环内使用那些相同的变量传递给sed来替换行。有没有一种方法可以打印整个行而不必将所有while变量打印到一个新文件中?
while IFS=';' read -r task_id date name action; do
sed -e "s/\$date/$date/; s/\$name/$name/" >> $TASKSFILE.tmp
done < $FILE
输入文件如下:
1;20190423;Name1;print $date $name
2;20190424;Name2;print $date $name
预期输出:
1;20190423;Name1;print 20190423 Name1
2;20190424;Name2;print 20190424 Name2
答案 0 :(得分:2)
您为什么不为此使用awk?在所有POSIX兼容平台上都可用。
awk -F';' '{sub(/\$date/,$2);sub(/\$name/,$3)} 1' "$FILE" > "${TASKSFILE}.tmp"
$ awk -F';' '{sub(/\$date/,$2);sub(/\$name/,$3)} 1' file
1;20190423;Name1;print 20190423 Name1
2;20190424;Name2;print 20190424 Name2