Linux 板


LINE

其实不一定要全部挤在同一行。 看你好像对 sed 还有爱,可以看看 sed 的语法。 我会把不同的 pattern 写成不同行,会比较好读, 也不用想要怎麽把一堆 pattern 挤在同一个 regexp 里。 反正只会有一行能成功匹配执行,其它会因为不匹配就放掉了。 另外你的 (idempotent) ,是保留 protocol 而已吗? 还是希望连 querystring 其它参数也保留? 要的话可能要多写几个 pattern 去抓。 ```sh youtu() { local vid vid='\([0-9a-zA-Z_-]\{11\}\)' sed " # hold protocol to hold space h s|^\(https*://\).*|\1| s|\$|youtu.be/| x # only one of them should match s|.*/v/$vid\$|\1| s|.*/v/$vid?.*|\1| s|.*/watch?v=$vid.*|\1| s|.*/watch?.*&v=$vid.*|\1| s|.*/user/.*/[0-9]*/$vid\$|\1| s|.*/user/.*/[0-9]*/$vid?.*|\1| s|.*embed/$vid\$|\1| s|.*embed/$vid?.*\$|\1| # append replace result to hold space # then move all to pattern space H g # there should be a \n after Hold, so remove it s/\n// " } ``` 後面有个比较奇怪的写法是我用 s 把换行删掉, 因为 H 把 pattern space 加到 hold space 结尾时, 似乎会加上一个换行符,那就只好事後再删掉。 ※ 引述《cuello (cuello)》之铭言: : #!/bin/sh : # : # 1604436674 created for testing in Linux/PTT : # : # 这是个 YouTube 缩网址的 one-liner. 必须很 portable. : # 我已测试过各种不同形状的水管 url's 例如: : # : # /v/<VID> : # watch?v=<VID> : # embed/<VID>?rel=0 : # watch?argv=xyz&v=<VID> : # watch?v=<VID>&list=PLDB852818BF378DAC : # watch?v=<VID>&feature=related : # watch?argv=xyz&v=<VID> : # watch?v=<VID>&feature=feedrec_grec_index : # user/IngridMichaelsonVEVO#p/a/u/1/<VID> : # v/<VID>?fs=1&amp;hl=en_US&amp;rel=0 : # watch?v=<VID>#t=0m10s : # embed/<VID>?rel=0 : # watch?v=<VID> : # http://youtu.be/<VID> (idempotent) : # : # 能不能帮忙看看还有哪些 url's 会出错, 并帮忙想办法? : # : # 我本来不喜欢缩网址的, 因为不知道有效期限多久... : # 但如果我没误解的话, youtu.be 是水管自家的, : # 而且保留了原始的影片 ID (确定都是11个字吗?). : # 所以还可以接受. : # : # 解说: : # : # 0. 它必须尽可能 portable, 不管甚麽系统, 必须随抄即用 : # 谁有 Solaris, SunOS, OsX, Ultrix, AIX, ... 拜托! : # 我只是很好奇, 它能有多广的 portability. : # : # 1. 请忽视与 termux 有关的东西, 那是让手机也可以用的, : # : # 2. youtu() 就已经是个充份的 one-liner. : # 为了应付可能出现的杂七杂八的选项及形态 : # 我决定撷取 \1. protocol 跟 \2. video_id : # 然後忽略掉其它可能出现的所有东西. : # : # 3. 为方便测试, 所以它要可以从 X-clipborad 读取, : # 由 stdin 读取, 也可以由指令行读取. : # : # 4. 用了 sed(1) tr(1) grep(1) xsel(1) termux-clipboard-get(1) : # : # 5. 1604555294 新增, 原本的 -e 's/$/\n/' | tr -s '\n' 是为了确保 : # 行尾起码有一个 newline, 而且只有一个. 这也是为了使用上方便. : youtu() : { : # sed -e 's|^\(http.\?\):.*[/vd]\{0,1\}[0-9vd][/=]\([0-9a-zA-Z_-]\{11\}\).*$|\1://youtu.be/\2|' -e 's/$/\n/' | tr -s '\n' : # 哇-- 这行那麽长不知道会不会坏掉.... : # : # 1604555294 更新, 上面那一行到 FreeBSD 就烧了, 先断成两行吧 (lantw44) : # sed 's|^\(http[s]\{0,1\}\):.*[/vd]\{0,1\}[0-9vd][/=]\([0-9a-zA-Z_-]\{11\}\).*$|\1://youtu.be/\2\ : #|' | tr -s '\n' : # 1604671459 找了 awk 帮忙来确保 one & only one newline : sed 's|^\(http[s]\{0,1\}\):.*[/vd]\{0,1\}[0-9vd][/=]\([0-9a-zA-Z_-]\{11\}\).*$|\1://youtu.be/\2|' | awk 1 : } : if [ -t 0 ] # priority: stdin > "$1" > X-clipboard : then : # echo "$HOME" | grep -q termux && XGET="termux-clipboard-get" || XGET="xsel" : # [ "$1" ] && echo "$1" | youtu || $XGET | youtu : # 1604570722 还是改一下吧, 以上两行是错的, A && B || C 不是 if-then-else : # (contributors: lantw44 rickieyang bitlife) : # if echo "$HOME" | grep -q termux : # then : # XGET="termux-clipboard-get" : # else : # XGET="xsel" : # fi : # : # if [ "$1" ] : # then : # echo "$1" | youtu : # else : # $XGET | youtu : # fi : # 1604671459 让它在 Mac 上也会动 (rickieyang) : if [ "$1" ] : then : echo "$1" | youtu : else # termux > Mac > X11 : XGET="xsel" : uname | grep -q "Darwin" && XGET="pbpaste" : echo "$HOME" | grep -q "termux" && XGET="termux-clipboard-get" : $XGET | youtu : fi : else : youtu : fi -- 我喜欢怕冷的女生 因为在冬天我可以一直抱着她 我喜欢贪吃的女生 因为我可以喂她吃东西 我喜欢爱睡的女生 因为看着她的睡脸我感到幸福 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.137.95.81 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1604673680.A.7C7.html
1F:推 holishing: 在 FreeBSD 装 gsed (X 11/06 22:54
※ 编辑: Gold740716 (220.137.95.81 台湾), 11/07/2020 14:42:49
2F:推 cuello: 展开来真的比较容易维护, 我来放一起好吗? 11/07 17:20
3F:→ Gold740716: 好 11/07 19:45







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP