如何在匹配指定行模式的行内,在第二个字段前添加@符号?
解决方案:在匹配指定模式行的第二个字段前添加@符号
嘿,这个需求用Unix/Linux下常用的文本处理工具awk或者sed就能轻松搞定,我给你详细说两种实用方法:
方法一:使用awk(推荐,字段处理更直观)
awk天生擅长处理按字段分割的文本,针对你的需求,假设要匹配以TESTING开头的行,执行以下命令:
awk '/^TESTING/ { $2 = "@"$2 } 1' input.txt
命令解释:
/^TESTING/:匹配所有以TESTING开头的行(如果你的目标行模式不是这个,把这里换成你的正则,比如匹配包含特定关键词的行就写/关键词/){ $2 = "@"$2 }:对匹配到的行,将第二个字段($2)修改为@加上原字段内容- 最后的
1:表示打印所有行(包括修改后的目标行和未匹配的原行)
如果需要直接修改原文件(无需输出到新文件),可以使用awk的-i inplace选项:
awk -i inplace '/^TESTING/ { $2 = "@"$2 } 1' input.txt
方法二:使用sed(正则替换方式)
sed通过正则替换实现需求,同样针对匹配TESTING开头的行,命令如下:
sed '/^TESTING/s/ \([^ ]*\)/ @\1/' input.txt
命令解释:
/^TESTING/:定位到目标行(替换规则仅作用于这些行)s/ \([^ ]*\)/ @\1/:替换操作:\([^ ]*\):匹配第一个空格后连续的非空格字符(也就是第二个字段),并用括号捕获这个内容@\1:将捕获的内容替换为@加上原捕获的字段,从而实现添加@符号的效果
要直接修改原文件,添加-i选项即可:
sed -i '/^TESTING/s/ \([^ ]*\)/ @\1/' input.txt
举个例子,输入行是:
TESTING 1234 0001 0002 0003
执行上述任意命令后,输出都会变成:
TESTING @1234 0001 0002 0003
内容的提问来源于stack exchange,提问作者Muizzuddin Jaafar
相关产品推荐
相关产品推荐

