作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个脚本来解析程序中的字段并将它们打印到标准输出。
输入文件数据是这样的
字段1 字段2
字段之间用制表符分隔
最初,我尝试用 AWK 编写它。
cat test.txt | while read line; do entity=`awk -F "\t" '{print $2}'`;echo $entity; done
这在命令行上运行良好。
但是当我尝试在 shell 程序中执行相同的操作时,如下所示
while read line
do
entity=`echo $line|awk -F \t '{print $2}'`
echo $entity
done<"test.txt"
原因是 echo $line 实际上将制表符打印为空格。我不能使用空格,因为字段实际上可以包含空格。
然后我尝试使用 cut 来编写。
while read line
do
entity=`echo $line|cut -f5`
echo $entity
done<"test.txt"
echo 又出现同样的问题。
有人遇到过类似的问题吗?您可以向我推荐任何解决方案。
谢谢。巴拉
最佳答案
当您有一个带有制表符的变量,然后尝试回显该变量时:
line=$'f1\tf2\tf3'
echo ${line}
发生的情况是 shell 将制表符视为参数分隔符并给出多个参数的回显。 echo 本身永远不会看到选项卡
如果您想保留选项卡,则需要将该行视为单个参数。为了做到这一点并仍然扩展变量,您需要用双引号将该变量引起来:
echo "${line}"
现在将发送一个包含选项卡的参数。
这意味着您应该像这样编写脚本:
while read line; do
entity=$(echo "$line" | awk -F \t '{print $2}')
echo $entity
done < test.txt
关于bash - echo 删除反斜杠字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010952/
我是一名优秀的程序员,十分优秀!