【问题标题】:How do I remove carriage returns from the input file using Bash? [duplicate]如何使用 Bash 从输入文件中删除回车? [复制]
【发布时间】:2015-11-04 07:54:02
【问题描述】:

我正在使用 Bash 读取压缩后的 csv 文件。我可以使用zgrep 获取行计数,但是当我将该行计数值存储在变量中时,我认为回车符也被存储了。因此,变量存储10\r,而不是10

当我echo变量时,它看起来像一个数字,我看不到回车符。

我试图通过将变量与另一个存储整数的变量进行比较来对变量进行一些数学运算,这就是引发错误的原因。

如何去掉回车符?

top answer here 似乎相关,但我无法弄清楚 done 是什么以及如何将其应用于我的情况

这是返回文件行数的函数:campaignFileRowCount=$(zgrep -w "campaign"$today".csv.gz" rowcountfile_"$today".csv.gz | cut -d, -f2)

然后当我尝试这样做echo $((campaignFileRowCount - 0)) 时,我收到错误")syntax error: invalid arithmetic operator (error token is "

【问题讨论】:

  • done 只是关闭while 循环体的关键字。
  • 请注意,回车仅在 echo 后面可见:回显 10\rasdf 只会打印 asdf,因为回车会重置行并开始打印 @ 987654335@ 超过10
  • 添加了我在做什么的详细信息。 Notepad++还显示了使用Windows格式化EOL转换的rowcountfile

标签: bash


【解决方案1】:

方法一

替换:

campaignFileRowCount=$(zgrep -w "campaign"$today".csv.gz" rowcountfile_"$today".csv.gz | cut -d, -f2)

与:

campaignFileRowCount=$(zgrep -w "campaign"$today".csv.gz" rowcountfile_"$today".csv.gz | tr -d '\r' | cut -d, -f2)

命令tr -d '\r' 将从输出中删除所有出现的回车符。

方法二

使用命令删除尾随回车符(需要 bash):

campaignFileRowCount=${campaignFileRowCount%%$'\r'}

这是一个后缀去除的例子。 shell 从campaignFileRowCount 的末尾删除任何与%% 之后显示的模式匹配的内容。

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2013-03-04
    相关资源
    最近更新 更多