我对 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+)"/')