bash - echo 打印到终端

bash - echo 打印到终端

我对 bash 脚本不太熟悉,所以我怀疑它可能非常简单。我编写了一个脚本来运行 URL,然后curl使用某些 id 解析输出,grep然后将其附加到文本文件。通过将其附加到文本文件,ID 以空格分隔,因此我尝试用换行符替换空格,如下所示:

#!/bin/bash

IDS=$(curl -v --silent "http://example.com" 2>&1 | grep -Eo 'data-user_id="[0-9]+"' | grep -Eo "[0-9]+")

echo ${IDS} >> "ids"
sed 's/ /\n/g' "ids"

但是当我运行它时,我看到文件的输出被写入终端,如果我删除最后一行 ( sed),输出就会消失。我之前用过tr,也发生过同样的事情。我该如何阻止这种情况发生?

答案1

sed正在使用您指定的替换内容打印文件。

我认为更好的想法可能如下:

#!/bin/bash

IDS=$(curl -v --silent "http://example.com" 2>&1 | grep -Eo 'data-user_id="[0-9]+"' | grep -Eo "[0-9]+")

echo "$IDS" | tr ' ' '\n' >> "ids"

这将$IDS在附加到文件之前回显并将空格应用于新行翻译。

答案2

用perl试试

IDS=$(curl -sv http://example.com |& perl -lne 'print $1 if /data-user_id="(\d+)"/')

相关内容