我想阅读所有txt文件的最后一个单词,如果“,”不存在,则附加“,”
我知道如何追加
for file in *.txt; do
echo ',' >> "$file"
done
但是在此代码之前需要放置并且只执行此操作','不是在文件的最后一个之后。
例如。文本文件abcd.txt具有以下数据
hello how are you hope you are good
现在我不得不在文件末尾出现“,”(逗号) 这里“好”是最后一行,如果“,”不是那么追加“,”
即hello how are you hope you are good,
对所有文件进行相同的检查,如果不存在则附加“,”。
请帮忙
答案 0 :(得分:2)
正如@Alex H.指出的那样,您可以使用tail
来检查最后一个字符。
根据测试,您可以使用sed
修改文件:
for file in *.txt; do
if [ "$(tail -c 2 "$file")" != "," ]; then
sed '$s/$/,/' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
fi
done
[ "$(tail -c 2 "$file")" != "," ]
- 测试最终字符不是,
。正如@Yushi在他的评论中指出的那样,文件的最后一个字符将是$
(行尾字符),所以我们需要tail -c 2
来检查它前面的字符。
sed '$s/$/,/' "$file"
- 在最后一行的末尾添加,
个字符。
> "$file.tmp" && mv "$file.tmp" "$file"
- 只需确保修改文件并将其保存为原始名称。
如果在GNU / Linux上,你可以使用更短的sed -i '$s/$/,/' "$file"
来完成同样的事情。 -i
是GNU sed
选项,用于通过创建临时文件来替换原始文件(在后台)来修改“inplace”文件。
答案 1 :(得分:1)
使用 tail 获取文件的最后一个字符:
tail -c 1 filename
然后捕获其输出并将其与“,”进行比较