shell - 如何读取文件的最后一个字并附加 ","(如果不存在)。 UNIX系统

标签 shell unix

我想读取所有txt文件的最后一个单词,如果“,”不存在,则在其后面附加“,”

我知道如何追加

for file in *.txt; do
echo ',' >> "$file"
done

但是在此代码之前需要放置 if 条件并执行此操作,仅 ',' 不在文件的最后一个后面。

例如。文本文件 abcd.txt 有以下数据

你好,希望你一切都好

现在我必须检查文件末尾是否存在“,”(逗号) 这里“good”是最后一行,如果“,”不是则附加“,”

你好,希望你一切都好,

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

请帮忙

最佳答案

正如 @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 选项,用于通过创建临时文件来替换原始文件(在后台)“就地”修改文件。

关于shell - 如何读取文件的最后一个字并附加 ","(如果不存在)。 UNIX系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26009555/

相关文章:

shell - 如何使用shell脚本删除子字符串

bash - 如何在 shell 中找到值 2 指数?

shell - 查找包含字符串的行并使用 shell 脚本将值回显到新行

linux - 脚本路径及其执行时间

linux - 在squid-std.conf 文件中打开端口的脚本

bash - 从 makefile 到 bash 的变量

linux - 如何在 shell 脚本的不同行上显示 lsusb 结果?

linux - 如何并行化我的 bash 脚本以与 `find` 一起使用而不面临竞争条件?

linux - grep 只出现一次

linux - 将多行附加到 Linux 文件中特定行的末尾