linux - 使用 sed 和 IFS 替换 while 循环中的值

标签 linux bash

我正在使用 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

最佳答案

为什么不为此使用 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

关于linux - 使用 sed 和 IFS 替换 while 循环中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55816595/

相关文章:

python - 如何将 bash 输出获取到变量并在 python 中隐藏输出

java - 在 ARM 上使用 BlueCove-DBus。 Linux 上 C 库和 Java 代码 (JNI) 之间的链接器错误

linux - X11:以另一个用户身份运行 gnome 应用程序

c++ - time.h 库默认函数 C++

bash - 在 UNIX shell 中实现 `sumproduct`

linux - 对文件进行排序,然后按原始顺序打印出其中的一部分 - Bash

bash - 在代理后面使用 ansible k8s 模块

linux - bash 命令打开一个命令或另一个命令

linux - 包含 CSR 的 POST 请求在 Bash 中失败

linux - 用 sed 替换从第 n 次出现的模式到行尾