使用 sed 循环

While loop with sed

我有以下代码,但是当我执行代码时它不起作用,文件 th2.csv 是空的。 sed 的功能是替换两个单词。我不知道如何使脚本正常工作。 必须用 while.

完成
bash th1.csv > th2.csv

脚本bash

 #!/bin/bash
   while read -r line; do
       echo "$line" | sed -E "s/,True,/,ll,/g;s/,False,/,th,/" th1.csv
    done < th1.csv

考虑到必须循环并逐行应用正则表达式的要求,然后考虑:

#!/bin/bash
while read -r line; do
   echo "$line" | sed -E "s/,True,/,ll,/g;s/,False,/,th,/" >> th2.csv
done < th1.csv

这是通过 while 循环逐行读取的。每行都作为标准输入传递给 sed。请注意,我们在您最初的 sed 尝试结束时删除了 th1.csv,因为这将覆盖 sed 从 stdin 读取(导致它忽略它,而是一遍又一遍地处理文件,每次迭代)。最后,我们每次迭代都会将 >> 附加到您的 th2.csv 文件。


猜想,您可能希望将这两个文件作为参数传递给脚本(仅基于您的第一个代码片段),然后您可以将其更改为:

#!/bin/bash
while read -r line; do
   echo "$line" | sed -E "s/,True,/,ll,/g;s/,False,/,th,/" >> ""
done < ""

并且,假设此脚本名为 myscript.sh,您可以这样称呼它:

 /bin/bash myscript.sh 'th1.csv' 'th2.csv'

或者,如果您使用 chmod +x myscript.sh 使其可执行,则:

 ./myscript.sh 'th1.csv' 'th2.csv'.