Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中不可见的0131数字_Bash_Sed_Tr - Fatal编程技术网

bash中不可见的0131数字

bash中不可见的0131数字,bash,sed,tr,Bash,Sed,Tr,我正在尝试使用bash从文件中收集数字。我的文件如下所示: number = 123; 我使用以下命令获取它: grep number file.txt | tr -dc 0-9 我得到的是: 0131123 我尝试了不同的数字和不同的方法sed's/[^0-9]//g',但它总是给我结果0131+my_number。 你知道为什么吗 更新 回答你的问题 user@domain:/tmp$ grep number file.txt number = 123; user@domain:/tm

我正在尝试使用bash从文件中收集数字。我的文件如下所示:

number = 123;
我使用以下命令获取它:

grep number file.txt | tr -dc 0-9
我得到的是:

0131123
我尝试了不同的数字和不同的方法
sed's/[^0-9]//g'
,但它总是给我结果0131+my_number。 你知道为什么吗

更新

回答你的问题

user@domain:/tmp$ grep number file.txt
number = 123;
user@domain:/tmp$ grep number file.txt | tr -dc 0-9
0131123user@domain:/tmp$ 
user@domain:/tmp$ grep number file.txt | sed 's/[^0-9]//g'
0131123
user@domain:/tmp$ cat file.txt 
number = 123;
正如您所看到的,该文件只包含一行内容

更新2

和给出的命令的结果


cat-v
之后,我可以看到magic 0131,但我不知道它来自哪里。

您可以使用
sed

sed -n 's/number = \(.*\);/\1/p' file.txt
或者与grep和朋友一起:

grep number file.txt | cut -d' ' -f3 | tr -d ';'
或者(如你所建议的):


更新:在给出原始答案之前,我没有尝试过你的例子。我只是想说你的例子对我有用。。(如上图所示)

这里有一个更通用的解决方案,它也适用于数字和其他数据:

#!/bin/bash
FILENAME='file.txt'
SEARCH_PATTERN='number'

foundLine=$(grep -m 1 "$SEARCH_PATTERN" "$FILENAME")
if [[ $foundLine =~ =.*\; ]]; then
    value=$BASH_REMATCH
    value=$(echo "${value:1:-1}" | xargs) # remove = and ; and then trim
    echo "Your value is: _${value}_"
else
    echo 'Line not found :('
fi
这非常有用,因为在包含以下内容的文件上:

    number       =        'complex thing :3' ; # my comment with numbers 123 512
number = 'sadfhsah';
它必须回来

Your value is: _complex thing :3_
因此,它不依赖于评论和其他垃圾中的数字


请注意,它不适用于包含换行符的变量和包含“;”的注释字符

来自您的
grep--color=始终
设置。设置后,默认情况下,它将用红色为匹配的子字符串上色(请参见详细信息),并将其另存为
^[[01;31m^[[K…^[[m^[[K
标记,其中…是匹配的子字符串。关闭
--color
选项或更改为使用
--color=auto
,您将解决此问题


顺便说一句,我想我应该为答案投上一票:)

是否
file.txt
还有任何其他行包含
number
?没有。number在这个文件中是唯一的。当我尝试这个时,我得到了“123”,正如人们所期望的那样。我不明白你为什么会遇到这个问题……我怀疑“0131”前缀是由脚本的另一部分生成的。我也有同样的问题结果为@roky。如果只执行第一部分,会发生什么情况:
grep number file.txt
?这些是ANSI或VT100转义序列。您可能使用类似
cat>file.txt
的内容创建了该文件,并尝试在键入时使用光标键进行编辑。同样使用
grep
,这一部分也有效:
grep-Po'(?@fedorqui Nice one!:)@fedorqui不适用于大多数GREP,因为它们是perl正则表达式。为什么使用颜色?我在原始问题中没有看到任何提到颜色的内容。因为默认情况下,对于任何匹配的子字符串,
GREP\u color
设置为
mt=1;31
(红色粗体)(请参阅详细信息)。我猜原始海报可能设置了
grep--color=always
,这样它会在grep输出中隐藏颜色代码(显示为红色,但显示为
^[[01;31m^[[Knumber^[[m^[[K
,在他的情况下,通过
cat-v
)。乞求业力/选票是不好的形式。(不过,你有我的投票权,这是一个好答案).谢谢.这是我在这里获得的第一个名声。
    number       =        'complex thing :3' ; # my comment with numbers 123 512
number = 'sadfhsah';
Your value is: _complex thing :3_