如何用SED命令在仅含大写字母和空格的行后插入空行?
用sed实现目标需求的解决方案
没问题,这事儿用sed就能轻松搞定,我直接上可用的命令,再给你拆解背后的逻辑:
核心命令
sed '/^[A-Z ]*$/G' your_input_file.txt
命令拆解
咱们把这个命令拆成两部分,就能明白它为啥能精准完成需求:
匹配规则
/^[A-Z ]*$/:这是sed用来筛选目标行的正则表达式:^标记行的起始位置,$标记行的结束位置,合起来就是要匹配整行内容;[A-Z ]匹配单个大写字母或者空格;*表示前面的字符(大写字母/空格)可以出现0次或多次;
简单说,这个规则就是精准抓出仅由大写字母和空格组成的行(包括全是空格的行)。
G命令:sed里的G命令会把「保持空间」(默认只存了一个换行符)的内容追加到当前匹配行的后面,直观效果就是给匹配到的行插入一个空行。
可选调整:排除全空格的行
如果你不想给全是空格的行也插空行,只针对包含至少一个大写字母的行操作,可以把正则改成这样:
sed '/^[A-Z ]*[A-Z][A-Z ]*$/G' your_input_file.txt
这个正则要求行里至少有一个大写字母,全空格的行就会被排除在外。
示例演示
假设你的输入文件内容是:
HELLO STACK OVERFLOW this is mixed case ALL CAPS HERE just spaces 123 numbers included
执行第一个核心命令后,输出会变成:
HELLO STACK OVERFLOW this is mixed case ALL CAPS HERE just spaces 123 numbers included
内容的提问来源于stack exchange,提问作者F.Cunha
相关产品推荐
相关产品推荐

