Echo将我的标签更改为空格

Jen*_* D. 23 bash delimiter

我从网络中采用以下结构作为如何从BASH中的文件读取的基本示例:

cat inputfile.txt | while read line; do echo $line; done
Run Code Online (Sandbox Code Playgroud)

但是,我的inputfile.txt是制表符分隔的,并且来自上述命令的行是以空格分隔的.

这在我的实际应用程序中引起了我的问题,这当然比上面的更复杂:我想采取行,基于它生成一些新的东西,然后输出原始行加上新的东西作为额外的字段.与管道将要足够复杂而不一堆cut -d ' 'sed -e 's/ /\t/g'(这将不会是包含空格反正制表符分隔数据安全).

我看过IFS解决方案,但在这种情况下它们似乎没有帮助.我想要的是一个OFS ...除了我是回声,而不是awk!我想如果我能够得到回应来吐出我给它的东西,逐字逐句,我会处于良好的状态.有什么想法吗?谢谢!

pax*_*blo 30

尝试:

cat inputfile.txt | while read line; do echo "$line"; done
Run Code Online (Sandbox Code Playgroud)

代替.

换句话说,它不是read替换选项卡,而是echo.

请参阅以下脚本(使用<<tab>>选项卡所在的位置):

pax$ echo 'hello<<tab>>there' | while read line ; do echo $line ; done
hello there

pax$ echo 'hello<<tab>>there' | while read line ; do echo "$line" ; done
hello<<tab>>there
Run Code Online (Sandbox Code Playgroud)

  • BTW`read`将删除前导和尾随空格,所以如果你想保留前导/尾随选项卡,请使用`...而IFS =读取行...`(注意,因为赋予IFS是读取的前缀命令,它只适用于那个,之后不必重置). (11认同)
  • 好悲伤; 那很容易吗?谢谢!无论如何都要把引号放进去的好习惯. (2认同)
  • 更换标签是(ba)sh和echo之间的阴谋.`echo $ line`将行拆分为单词,然后将其全局化并分别传递给echo,然后使用空格将它们连接起来.`echo"$ line"`按原样传递字符串.相比之下,DOS/Windows`echo%line%`既没有这些东西(甚至回声引用字符). (2认同)