gpt4 book ai didi

bash - echo 删除反斜杠字符

转载 作者:行者123 更新时间:2023-11-29 09:41:49 24 4
gpt4 key购买 nike

我正在尝试编写一个脚本来解析程序中的字段并将它们打印到标准输出。

输入文件数据是这样的

字段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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com