免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12813 | 回复: 11

[文本处理] 关于一个sed例子的几个疑问 [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-19 10:23 |显示全部楼层
最近要批量将ta**件导入到docker images , 在网上查到有这么一行命令可以实现:


ls *.
tar|awk '{print $NF}'|sed -r 's#(.*)#sudo docker load -i \1#' |bash


想问一下,sed正则中间的这一段  :
's#(.*)#sudo docker load -i \1#'


我应该如何来理解?


s# 是表示替换的意思吧

(.*)是表示所有的内容吗?


后面的\1# 是表示什么意思?

论坛徽章:
0
发表于 2020-08-19 18:31 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2020-08-20 10:58 |显示全部楼层
s是替换,即substitute

#有3个,是分隔符,可以是其它任意字符,比如常见的还有逗号(,)和斜杠(/)

替换的一般语法是s/source/target/,
source部分由正则表达式组成,
target部分是正常的字符串,非正则表达式但支持positional variable,即\1 \2 \3等(一般最大到9),它们会被source中的group内容所替换(BRE的group由\( \)组成,ERE的group由( )组成)

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2020-08-20 14:26 |显示全部楼层
回复 1# 274920831


\1 是后向引用,参考:http://bbs.chinaunix.net/thread-605570-1-1.html

s#(.*)#sudo docker load -i \1#
# 是替换分隔符,整体意思是把红色部分替换为蓝色部分

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2020-08-20 15:11 |显示全部楼层
回复 4# Shell_HAT

老大过来帮我看看

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-22 09:23 |显示全部楼层
回复 3# 小工匠k

非常感谢!

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-22 09:24 |显示全部楼层
回复 4# Shell_HAT

非常感谢!

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-22 13:01 |显示全部楼层
回复 4# Shell_HAT

刚看了一下你说的  http://bbs.chinaunix.net/thread-605570-1-1.html  这篇文章,
其中有一段是:
[注 :] \<, \> 这二个特殊字符, 并不是很通用. 请参考 Appendix A 中的附表.
\( ... )\ 于 Regular Expression 中使用 `` \(''``{ \)}''来括住一部分的 Regular Expression; 其后可用 `` \1'''来表示第一次被`` \('' `` \)'' 括住的部份


你说 \1 是后向引用那么  s#(.*)#sudo docker load -i \1#

这条语句的功能是不是等同于
sudo docker load -i (.*)  

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-22 13:02 |显示全部楼层
回复 4# Shell_HAT

刚看了一下你说的  http://bbs.chinaunix.net/thread-605570-1-1.html  这篇文章,
其中有一段是:
[注 :] \<, \> 这二个特殊字符, 并不是很通用. 请参考 Appendix A 中的附表.
\( ... )\ 于 Regular Expression 中使用 `` \(''``{ \)}''来括住一部分的 Regular Expression; 其后可用 `` \1'''来表示第一次被`` \('' `` \)'' 括住的部份


你说 \1 是后向引用那么  s#(.*)#sudo docker load -i \1#

这条语句的功能是不是等同于
sudo docker load -i (.*)  

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2020-08-24 09:30 |显示全部楼层
回复 9# 274920831
找到了,是这一个地方。

用法二. 进行字符串找寻并置换(Replace)时, 若将被置入的新字符串不是一个固定的字符串, 与被找到的原字符串有关时(见下例说明). 此时, 可先以 \( \)来括住一部分的Regular Expression; 再于将被新置入的字符串中使用`` \1'', `` \2'',... 来表示当时被找到的字符串(或其子字符串).
例 : 欲找出档案中具有 ``prog12.c'', ``prog9.c'', ``prog832.c'',... 等式样的字符串, 并将其置换成(以上列三个字符串为例) ``[ note 12]'', ``[ note 9]'', ``[ note 832]''. 在这例子中, 因事先不知道所找寻到的字符串(prog数字.c)中的 数字 为何, 故无法事先决定应换成什么新字符串. 合于本例所要找寻的字符串其 Regular Expression 为 :
Regexp `` prog[0-9][0-9]*\.c'' 上式中 `` [0-9][0-9]*'' 表一位或一位以上的阿拉伯数字, 因 执行前并不知道该部分实际会匹配什么数值, 故找到的字符串将来应置换 成什么, 事前无法指定. 这情况, 也可用`` \('',`` \)'' 来括住 `` [0-9][0-9]* '', 在置换的新字符串中再以 \1 表示找寻时实际匹配到的数字.

读者可编辑一数据文件, 再以sed执行下列命令, 观察其执行结果.

$sed -e 's/ prog\([0-9][0-9]*\)\.c/[ note \1]/g' 资料文件名
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP