- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个简单的 bash 脚本。它从文件 test.html
中读取一堆 HTML 并提取一个子字符串,但现在它没有输出任何内容。
grep yt-lockup-content test.html | while read -r line; do
datasession=`expr "$line" : ".*data-sessionlink=\"\(.*\)\" >.*"`;
users=`expr "$line" : ".*data-sessionlink=\"$datasession\" >\(.*\)</a>.*"`; echo ${users}
done
我已经指出问题是它不适用于变量 $datasession
。如果我用 HTML 的第一个 block 中的正确文本替换它,它就可以正常工作。
grep yt-lockup-content test.html | while read -r line; do
datasession=`expr "$line" : ".*data-sessionlink=\"\(.*\)\" >.*"`;
users=`expr "$line" : ".*data-sessionlink=\"itct=CJgBEJQ1GAMiEwjOnsu1ou_RAhVJdaoKHVzWA1Eojh4\" >\(.*\)</a>.*"`; echo ${users}
done
关于如何实现我的想法有什么建议吗?
test.html
:
</div><div class="yt-lockup-content"><h3 class="yt-lockup-title polymer-title"><a href="/watch?v=dybBD1hbmF4" class=" yt-ui-ellipsis yt-ui-ellipsis-2 polymer-title-link yt-uix-sessionlink spf-link " data-sessionlink="itct=CJgBEJQ1GAMiEwjOnsu1ou_RAhVJdaoKHVzWA1Eojh4yCmctaGlnaC10cnZaD0ZFd2hhdF90b193YXRjaA" title="Ellen's Comments on the Travel Ban" aria-describedby="description-id-183985" dir="ltr">Ellen's Comments on the Travel Ban</a><span class="accessible-description" id="description-id-183985"> - Duration: 2:44.</span></h3><div class="yt-lockup-byline polymer-byline"><a href="/user/TheEllenShow" class="g-hovercard yt-uix-sessionlink spf-link " data-ytid="UCp0hYYBW6IMayGgR-WeoCvQ" data-sessionlink="itct=CJgBEJQ1GAMiEwjOnsu1ou_RAhVJdaoKHVzWA1Eojh4" >TheEllenShow</a> <span class="yt-uix-tooltip yt-channel-title-icon-verified yt-sprite" title="Verified"></span></div><div class="yt-lockup-meta polymer-metadata"><ul class="yt-lockup-meta-info"><li>855,335 views</li><li>1 day ago</li></ul></div></div></div></div></li><li class="yt-shelf-grid-item yt-uix-shelfslider-item"><div class="yt-lockup yt-lockup-grid yt-lockup-video vve-check clearfix" data-context-item-id="sAwFLtbc7_c" data-visibility-tracking="CJcBEJQ1GAQiEwjOnsu1ou_RAhVJdaoKHVzWA1Eojh5A99_ztu2lgYawAQ=="><div class="yt-lockup-dismissable"><div class="yt-lockup-thumbnail contains-addto polymer-thumbnail-padding"><a aria-hidden="true" href="/watch?v=sAwFLtbc7_c" class=" yt-uix-sessionlink spf-link " data-sessionlink="itct=CJcBEJQ1GAQiEwjOnsu1ou_RAhVJdaoKHVzWA1Eojh4yCmctaGlnaC10cnZaD0ZFd2hhdF90b193YXRjaA" ><div class="yt-thumb video-thumb"><span class="yt-thumb-simple">
<img width="196" data-ytimg="1" height="110" alt="" src="https://i.ytimg.com/vi/sAwFLtbc7_c/hqdefault.jpg?custom=true&w=196&h=110&stc=true&jpg444=true&jpgq=90&sp=68&sigh=qC9IiuL6075XOXO7ipK_PmTwmx8" onload=";__ytRIL(this)" >
<span class="video-time" aria-hidden="true">5:24</span></span></div></a> <span class="thumb-menu dark-overflow-action-menu video-actions">
<button type="button" aria-expanded="false" class="yt-uix-button-reverse flip addto-watch-queue-menu spf-nolink hide-until-delayloaded yt-uix-button yt-uix-button-dark-overflow-action-menu yt-uix-button-size-default yt-uix-button-has-icon no-icon-markup yt-uix-button-empty" onclick=";return false;" aria-haspopup="true" ><span class="yt-uix-button-arrow yt-sprite"></span><ul class="watch-queue-thumb-menu yt-uix-button-menu yt-uix-button-menu-dark-overflow-action-menu hid"><li role="menuitem" class="overflow-menu-choice addto-watch-queue-menu-choice addto-watch-queue-play-next yt-uix-button-menu-item" data-action="play-next" onclick=";return false;" data-video-ids="sAwFLtbc7_c"><span class="addto-watch-queue-menu-text">Play next</span></li><li role="menuitem" class="overflow-menu-choice addto-watch-queue-menu-choice addto-watch-queue-play-now yt-uix-button-menu-item" data-action="play-now" onclick=";return false;" data-video-ids="sAwFLtbc7_c"><span class="addto-watch-queue-menu-text">Play now</span></li></ul></button>
</span>
我试图用 grep 和 expr
提取的文本是 YouTube 用户名:TheEllenShow
最佳答案
我想出的解决方案如下。请记住,这是一个“勉强可行”的解决方案,我使用它只是为了完成我的项目并继续前进。正如 Chepener 所说,expr 不是这项工作的好工具,我只是因为需要才使用它。
grep yt-lockup-content test.html | while read -r line; do
users=`expr "$line" : ".*[a-zA-Z0-9]\" >\(.*\)</a>[</div>? ?]*"`; echo ${users}
done
关于regex - expr 正则表达式中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125716/
这个问题在这里已经有了答案: Difference between JSP EL, JSF EL and Unified EL [closed] (2 个回答) 5年前关闭。 前段时间我读过关于“Co
在阅读德州仪器为其 SensorTag 提供的示例代码时我发现了以下代码段。 void SensorTagIO_processCharChangeEvt(uint8_t paramID) {
我正在尝试编写支持简单语法的宏,例如: boo: 3 and foo: go or bar: 4+2 这是我试过的: macro_rules! solr { ($TOPIC:ident : $
有人知道 C 中 if(Expr,Expr) 结构的逻辑含义是什么吗?喜欢: if(lcn = (ULONG)GetLCN(index),lcn) 最佳答案 当您有“,”时,表达式的计算结果为列表中的
我花了几个小时试图让下面的代码工作 PATH="C:\Ben\MyPictures" echo $PATH MY=`expr 2 + 2` 但这不会起作用,因为“expr: c
我尝试将两个数字(实际上这些是某些远程执行命令的输出)分配给 2 个不同的变量,比如说 A 和 B。 当我回显 A 和 B 时,它们显示值: echo $A 809189640755 echo $B
我该怎么做才能使以下工作正常进行? 我需要创建一个接受 Expr 列表并返回 Expr 的函数(Expr 列表 -> Epxr)。 type DataObject() = let data =
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: bash: $[] vs. $(()) $(( expr )) 构造可用于整数 math在 bash 中,例
我很难理解这里的声明: for( int i=0; i< out_length; i++){ int num=i < length_a ? array_a[i] : 0; ... ... 我
我只是好奇。我想知道表达式是否有特定原因 var &= expr 行为方式与不同 var = var && expr. 看起来第一个表达式中的表达式正在执行,而不管 var 上的 false 值。 我
在 bash 中,我不明白为什么第三个命令不正确: [[ 1 -eq 1 ]] # $? is 0 [[ ! 1 -eq 1 ]] # $? is 1 [[ ! ! 1 -
这个问题在这里已经有了答案: Lifetime of temporaries (2 个答案) 关闭 8 年前。 我有一个统计管理器,它通过测量方法执行所需的时间来检查我的应用程序性能。它的用法是这样
我不确定这里是否有人问过这个问题,但我在这里很困惑。我正在读这本很棒的书,名为《Advanced R》,作者为 Hadley Wickham,来自 here . 这里已经描述了一个名为cement的函
我正在通过解析类似 Excel 的公式来生成 sql 请求。 因此,对于给定的公式,我收到以下请求: SELECT IF(COL1='Y', SUM(EXPR),NULL) FROM Table 我没
我看到了一些非常奇怪的东西,我无法解释。我在猜测一些我不熟悉的 C# 边缘情况,或者运行时/发射器中的错误? 我有以下方法: public static bool HistoryMessageExis
我在玩Prefix和 Postfix运算符(分别为 @ 和 //),我遇到了以下问题。 给定以下代码,它们以相同的方式进行评估: Hold[MatrixPlot@Sort@data] // FullF
有没有人在使用 Pandas 时解决了这个 pylint 问题? C:525,59: Comparison to True should be just 'expr' or 'expr is True
我正在尝试制作一个可以按以下方式调用的宏: mactest!(some::Path[1, 2, AnotherName[3, 4]]) 这相当于以下内容: make_result( "some
这两种方法有区别吗? public String toString() { return this.from.toString() + this.to.toString(); } public
我有一个小问题。如果你想测试这里的两个 bash 脚本。这是工作 #!/bin/bash N=40 while [ "$N" -gt 0 ] do echo $N N=`expr $N - 1` do
我是一名优秀的程序员,十分优秀!