使用 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'.
我有以下代码,但是当我执行代码时它不起作用,文件 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'.