gpt4 book ai didi

bash - 连接 grep 输出字符串(bash 脚本)

转载 作者:行者123 更新时间:2023-12-03 10:03:14 25 4
gpt4 key购买 nike

我正在使用 bash 脚本(Ubuntu 12.10)处理文本文件中的一些数据。

基本思想是我使用 grep 从文件中选择某一行。接下来,我处理该行以使用 sed 获取数字。 grep 和 sed 命令都在工作。我可以回应这个数字。

但是结果与字符串的连接出错了。

当我从变量或文件执行 grep 命令时,组合字符串时得到不同的结果。当我 grep 文件时,连接出错。当我使用与文件中相同的文本 grep 变量时,它按预期工作。

我对文件中的 grep 做错了什么?

test.pdb 的内容

REMARK overall = 324.88  
REMARK bon = 24.1918
REMARK coup = 0

我的脚本

#!/bin/bash

#Correct function
echo "Working code"
TEXT="REMARK overall = 324.88\nREMARK bon = 24.1918\nREMARK coup = 0\n"
DATA=$(echo -e $TEXT | grep 'overall' | sed -n -e "s/^.*= //p" )

echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA


#Not working
echo ""
echo "Not working code"
DATA=$(grep 'overall' test.pdb | sed -n -e "s/^.*= //p")

echo "Data: $DATA"
DATA="$DATA;0"
echo $DATA

输出
Working code
Data: 324.88
324.88;0

Not working code
Data: 324.88
;04.88

最佳答案

我对同样的问题发疯了。

真正的问题是您的“test.pdb”可能有错误的 EOL(行尾)字符。

Linux EOL:LF(又名\n)

Windows EOL:CR LF(又名\r\n)

这意味着 echo 和 grep 会遇到这个额外字符 (\r) 的问题,幸运的是 tr、sed 和 awk 正确管理它。

所以你也可以尝试:

DATA=$(grep '整体' test.pdb | sed -n -e "s/^.*=//p"| sed -e 2s/\r$//")

或者

DATA=$(grep '整体' test.pdb | sed -n -e "s/^.*=//p"| tr -d '\r')

关于bash - 连接 grep 输出字符串(bash 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462575/

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