2017-04-11 76 views
-1

我有一个带回车的文件和一个bash脚本,因为它们不起作用。我处理它们的方式是使用dos2unix。这是脚本:在bash中获取过去的回车没有更改原始文件

while IFS= read -r line; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done < <(dos2unix < file) 

这样我不修改原始文件,一切都很好。我的问题是:是否有另一种方法来做同样的事情 - 越过回车而不是同时修改原始文件。

+0

在这种情况下REGEX应该是什么,即你想要完全匹配什么?向我们展示您的输入和期望输出的示例。 –

回答

0

人们可以平凡除去的后回车(当且仅当所述角色存在的话)与parameter expansion

while IFS= read -r line && line=${line%$'\r'}; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done <file 

${var%val}膨胀到的$var与从端部去除的字符串val内容; $'\r'ANSI-C-like syntax,用于在ksh93,bash和实现扩展的其他shell中的回车符。

+0

在Bash中,'$'\ r''需要'shopt -s extquote'(尽管它默认是启用的)。 – ephemient

+0

永远的我应该对你保持负债先生Lifesaver! –

+0

请帮我解决一件事。我想在** I循环之前在“文件”**上执行sed“s/\”/ \'\'/ g“。我试图在最后(与“完成”相同的行)管道它,但它没有奏效。我该怎么做,在哪里做? –

相关问题