![如何使用 sed 跳过空文件?](https://linux22.com/image/62330/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E8%B7%B3%E8%BF%87%E7%A9%BA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在sed
这样使用:
sed -e 's/ *| */|/g'
${array_export_files[$loopcount]}>>$TEMPDIR/"export_file"_${testid}_${loopcount}_$$
在 while 循环下,但当文件为空或不包含任何内容时就会出现问题。
sed
如果文件存在但是为空,我不希望运行;sed
如果文件不存在,我不想运行。
完整的代码片段是
while [ $loopcount -le $loopmax ]
do
if [ "$loopcount" -eq "$loopcount" ]
then
sed -e 's/ *| */|/g' ${array_export_files[$loopcount]}>>$TEMPDIR/"export_file"_${testid}_${loopcount}_$$
tr "|" "\t" <"export_file"_${testid}_${loopcount}_$$>${array_export_files[$loopcount]}
cp ${array_export_files[$loopcount]} "export_file"_${loopcount}_${testid}
echo "Testing Starts Here"
echo ${array_export_files[$loopcount]} "export_file"_${loopcount}_${testid}
echo "Testing Ends Here"
fi
(( loopcount=`expr $loopcount+1`))
done
所以我无法在上面的 if 语句中替换或使用 AND 运算符,是否有解决这个问题的方法?如果我使用 AND 运算符,那么它可能会跳过下面的整个代码部分,也不会运行我只想有条件地跳过 sed 部分。
答案1
Bash 可以-s
选择测试是否存在和大小大于零:
-s file
True if file exists and has a size greater than zero.
所以你可以做
if [ -s "${array_export_files[$loopcount]}" ]; then
sed .......
fi
循环内。由于if [ "$loopcount" -eq "$loopcount" ]
始终为真,因此您可以将其替换为:
while [ "$loopcount" -le "$loopmax" ]
do
if [ -s "${array_export_files[$loopcount]}" ]
then
sed -e 's/ *| */|/g' "${array_export_files[$loopcount]}" >>" $TEMPDIR/export_file_${testid}_${loopcount}_$$"
tr "|" "\t" <"export_file_${testid}_${loopcount}_$$">"${array_export_files[$loopcount]}"
cp "${array_export_files[$loopcount]}" "export_file_${loopcount}_${testid}"
echo "Testing Starts Here"
echo "${array_export_files[$loopcount]}" "export_file_${loopcount}_${testid}"
echo "Testing Ends Here"
fi
(( loopcount = loopcount + 1 ))
done