Bash 修剪.txt文件中行的结尾空白

Bash 修剪.txt文件中行的结尾空白,bash,trim,Bash,Trim,我正在尝试删除file.txt中包含许多行的最后一个空间。 我只需要删除第三列/每行后面的“仅最后一个空格”。 我的文件如下所示: 3 180 120 3 123 145 6 234 0 4 122 12 我一直在尝试以下脚本,但到目前为止,它不起作用。有人能帮我吗 #!/bin/bash var="val1 val2 val3 " var="${var%"${var##*[![:space:]]}"}" echo "===$var===" <Antart

我正在尝试删除file.txt中包含许多行的最后一个空间。 我只需要删除第三列/每行后面的“仅最后一个空格”。 我的文件如下所示:

    3 180 120
    3 123 145
    6 234 0
    4 122 12
我一直在尝试以下脚本,但到目前为止,它不起作用。有人能帮我吗

#!/bin/bash
var="val1 val2 val3 "
var="${var%"${var##*[![:space:]]}"}"
echo "===$var===" <Antart_csv1_copy.txt> trimmed.txt
#/bin/bash
var=“val1 val2 val3”
var=“${var%”${var##*[![:space:][]}”
echo“==$var==”trimmed.txt
您可以使用sed:

sed -i -e 's/ $//g' filename.txt
  • -i
    将使命令就位(更改原始文件)
  • -e的//$/g'
    将接受正则表达式
    ,并将其更改为无。修改器
    g
    使其适用于文件中的所有行
您可以在不使用
-i
的情况下先尝试,然后重定向输出:
sed-e的//$//g'filename.txt>trimmed.txt

另一种解决方案删除每行的所有尾随空格:

while read line; do echo "${line%%*( )}" >> trimmed.txt; done < Antart_csv1_copy.txt
读行时
;执行echo“${line%%*()}”>>trimmed.txt;完成
如果有超过1个尾随空格怎么办?@nullPointer则会保留额外的空格-正如OP要求的那样:
删除“仅最后一个空格”
。回答得好。请注意,修饰符
g
允许对一行进行多次替换。在这种情况下,您不必指定它。(无论如何这是无害的。)@Socowi这个问题的标题就像“修剪结束的空白…”。我建议简单地将其切换到
sed-I-e的//*$//g'filename.txt
,否则这是一个好方法answer@nullPointer如果我们在玩单词游戏,那么“修剪结束的空白”就意味着只有一个空格,否则,它会声明“修剪结束的空白”。除此之外,在文本中还有:我只需要删除“仅最后一个空格”。我正在回答这个问题。你的建议没有回答OP问题我对
%%*()
部分有点困惑。你能解释一下吗?
${line%*}
不会做同样的事情吗?@Socowi,你为什么不试试
${line%*}
看看它到底做了什么?我只需要最后一个空格!谢谢我已经解决了这个问题:)当然我尝试了
${line%*}
——但是,只有一个尾随空格。现在我看到了问题:
'*'
的最短匹配(
%
)总是
'