javascript - 如何替换最后出现的逗号

标签 javascript bash sed

我正在编写一个使用此文件的 bash 脚本:

Chicago
Indianapolis
Denver
Miami

并将其变成这样:

[
    'chicago',
    'indianapolis',
    'denver',
    'miami',
]

问题是这是一个 JavaScript 数组,我需要删除最后一行的最后一个逗号。我尝试跟踪最后一行并将其替换为 sed,如下所示:

lastline=1

echo [ > cities_array.txt

while IFS=$'\n' read -r line || [[ -n "$line" ]]; do
    city=$(echo $line | sed -e 's/\([A-Z]\)/\l\1/')

    echo '    '$city',' >> cities_array.txt

    let lastline++
done < cities.txt

echo ] >> cities_array.txt

sed -e "$lastline"'s/,//' cities_array.txt > cities_array.txt

最后一行绝对不会向文件写入任何内容,从而删除所有内容。我也尝试过:

sed -e '"$lastline"s/,//' cities_array.txt > cities_array.txt
sed -e '$lastlines/,//' cities_array.txt > cities_array.txt

这些都不起作用。我该怎么做?

最佳答案

问题是当你写:

sed ... file > file

bash 解释 > 文件 并在 sed 启动之前清空该文件。

你可以使用

sed -i ... file

“就地”进行编辑


顺便说一下,你可以让整个事情变得更简单:

{
  echo -n '['
  while read -r line && [[ -n "$line" ]]; do echo "'${line,,}'"; done | paste -sd,
  echo ']'
} < cities.txt > cities_array.txt

尽管这会产生一长行,而不是每行一个城市(不过,与 javascript 相同。)

关于javascript - 如何替换最后出现的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534262/

相关文章:

regex - sed - 替换后跟 5 位数字的新行字符

javascript - $ (":focus") 在 Firefox 中没有为 &lt;input type ="file"/> 返回任何元素

bash - 使用 bash 命令在 cpanel 中使名称中包含空格的文件无法访问

linux - 使用 bash 时忽略正则表达式

regex - sed中的非贪婪(勉强)正则表达式匹配?

awk - 使用sed删除除结束模式以外的行范围

javascript - AngularJS中如何分割数据?

javascript - 在 execCommand 中,我如何知道 formatblock 命令的所有可用参数?

javascript - 触发焦点操作,但仅当不是由于单击而触发时

linux - xfce4 终端中的自定义键绑定(bind)——这真的不可能吗?