如何读取文件的最后一个单词并附加“,”如果不存在则。 UNIX

时间:2014-09-24 05:56:34

标签: shell unix

我想阅读所有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,

对所有文件进行相同的检查,如果不存在则附加“,”。

请帮忙

2 个答案:

答案 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

然后捕获其输出并将其与“,”进行比较