![根据个人规则编辑文本文件](https://linux22.com/image/179610/%E6%A0%B9%E6%8D%AE%E4%B8%AA%E4%BA%BA%E8%A7%84%E5%88%99%E7%BC%96%E8%BE%91%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我想编辑给定的文本文件
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...
其中 /s-show/ 位于每一行中,后跟随机字符“...”
有两种情况:
一行以“dd.mm.yyyy”格式的日期开始,然后是逗号和空格,之后是“hh:mm”格式的时间,最后是 /s-show/...
一行仅以日期开头,后跟一个逗号,然后直接 /s-show/...
每行都应该这样编辑:
在第一种情况下,在 hh:mm 后面放置三个空格(因此,如果行以日期和时间开头),在第二种情况下,在逗号后面放置 3 个空格(如果结果仅以日期开头),然后添加相同的字符串 " https://www.test.com”位于 /s-show/ 之前
/s-show/ 是链接的一部分,必须通过左侧的“https://www.test.com”补充为有效链接。
所以每一行的结果应该是这样的:
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...
这怎么可能做到呢?额外的好处是链接从同一个地方开始,所以在第一种情况下是 3 个空格,在第二种情况下是 9 个空格。
答案1
此答案假设日期(和时间)之后的文本始终以固定字符串开头/s-show/
。
sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#' inputfile > outputfile
解释:
该脚本不检查日期或时间,它只需要与/
行开头不同的 17 个字符(或 11 个字符),然后在捕获的组之间/s-show/
插入所需数量的空格。https:/www.test.com
注意:在sed
的替换 ( s
) 命令中,我使用分隔符#
而不是通常的分隔符/
来避免转义模式中的斜杠。
测试:
echo 'dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...' | sed -e 's#^\([^/]\{17\}\)\(/s-show/\)#\1 https:/www.test.com\2#' -e 's#^\([^/]\{11\}\)\(/s-show/\)#\1 https:/www.test.com\2#'
印刷
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, hh:mm https:/www.test.com/s-show/...
dd.mm.yyyy, https:/www.test.com/s-show/...
答案2
Perl 对此很方便:
perl -pe 's{([^/]+)}{ sprintf "%-17s https://www.test.com", $1 }e' file