Regex Awk正则表达式:匹配任何第一个字符

Regex Awk正则表达式:匹配任何第一个字符,regex,bash,awk,gawk,Regex,Bash,Awk,Gawk,我正在尝试创建一个更有效的“检查URL是否存在”功能,我几乎完成了唯一的障碍是正则表达式 因此,我正在寻找一个正则表达式,它将匹配输出的任何第一个字符,然后打印并退出 例如,下面的代码获取youtube页面的源代码,一旦输出达到标题标记,它就会匹配它们,并终止wget命令 从这里借来的想法 性能/效率 在这里,出于懒惰,我们让perl读取内存中的全部内容 在开始查找标记之前。鉴于标题是 可在文件的前几个字节中的节中找到 文件,这不是最优的。更好的方法,如果GNU awk可用 在您的系统上可以是

我正在尝试创建一个更有效的“检查URL是否存在”功能,我几乎完成了唯一的障碍是正则表达式

因此,我正在寻找一个正则表达式,它将匹配输出的任何第一个字符,然后打印并退出 例如,下面的代码获取youtube页面的源代码,一旦输出达到标题标记,它就会匹配它们,并终止wget命令

从这里借来的想法

性能/效率

在这里,出于懒惰,我们让perl读取内存中的全部内容 在开始查找标记之前。鉴于标题是 可在文件的前几个字节中的节中找到 文件,这不是最优的。更好的方法,如果GNU awk可用 在您的系统上可以是:

wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' | \
gawk -v IGNORECASE=1 -v RS='</title' 'RT{gsub(/.*<title[^>]*>/,"");print;exit}' 
对于我的“检查URL是否存在”功能,我也尝试了这个
答案中建议的curl解决方案基本上是可以的,但像Quora return 403这样的网站是禁止的,是的,我添加了用户代理,但wget plus gawk解决方案返回的源代码更适合确定URL是否存在。

多亏@karakfa的建议,我找到了解决方案

匹配输出的第一个字符,打印并退出

echo "Yes, a down vote, just what I needed" | awk '{print $1;exit}' FS=""
# It will print
Y
我的脚本的完整源代码
检查URL.sh
(工作正常)


如果您不是如此致力于使用awk,那么您可以使用
grep
快速轻松地完成此任务:

if wget -qO - https://stackoverflow.com/ | grep -q ""
then
  echo "wget returned at least one character."
fi

是的,投反对票,这正是我需要的cut-c1将为您提供第一个字符<代码>awk等效代码可以是
…|awk“{print$1}”FS=”“
@karakfa谢谢,但我希望在匹配第一个字符后退出命令。我可以是doneThanks@karakfa吗?我找到了解决方案,这要感谢您的帮助suggestion@karakfa你真是个天才谢谢,我改进了你的建议,找到了问题的解决方案
awk'{print$1;exit}'FS=“”
请注意,对于以NUL字节开始的二进制文件(如非混合ISOs),这不会像您计划的那样起作用。@that otherguy检查我的答案我发布了脚本的完整源代码。在我的脚本中,我将使用以NUL字节开始的网站源代码二进制文件(如非混合ISOs),这与网站的源代码相关吗?你能展示一个不起作用的示例网页吗。无论如何,谢谢你的意见!好的,我已经测试了你的代码,它似乎和我的一样好。我使用
time
命令来比较两者。顺便说一句,我承诺使用awk,因为我不知道这可以用任何其他命令来完成。事实上,我会接受你的回答,因为我想给别人一个帮助我的名声。我基本上是一个初学者,我不知道很多命令和东西。现在想想,你的解决方案可能比我的更健壮、更可靠
# Variables
URL="$*"
user_agent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"

# Main program
first_character_of_source_code=$(wget -e robots=off --user-agent="$user_agent" -qO- "$URL" | \
awk '{print $1;exit}' FS="")

if [[ $first_character_of_source_code != '' ]]; then
    echo "URL exists!"
    exit 0
else
    echo "URL doesn't exist!"
    exit 1
fi
if wget -qO - https://stackoverflow.com/ | grep -q ""
then
  echo "wget returned at least one character."
fi