根据个人规则编辑文本文件

根据个人规则编辑文本文件

我想编辑给定的文本文件

dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy, hh:mm/s-show/...
dd.mm.yyyy,/s-show/...

其中 /s-show/ 位于每一行中,后跟随机字符“...”

有两种情况:

  1. 一行以“dd.mm.yyyy”格式的日期开始,然后是逗号和空格,之后是“hh:mm”格式的时间,最后是 /s-show/...

  2. 一行仅以日期开头,后跟一个逗号,然后直接 /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

相关内容