从列表中的一些分隔字段中删除文本

从列表中的一些分隔字段中删除文本

想知道最快的方法是从列表中的一些分隔字段中删除文本。

我的清单如下:
text text:number:text:text:text:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*

我希望它看起来像这样:
text text:*:*:*:*:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*

因此,一些包含数据的字段需要用星号替换,一些字段需要保持不变,并且分隔符不一致(第一个和第二个字段用空格分隔)。这是在 Linux 文件系统上,最好采用在文件上内联的方式。

非常感谢你的帮助!

答案1

我将使用与您的文本匹配的正则表达式(括号将文本捕获到由 \1、\2 等指定的缓冲区中):

(.*):([0-9]+):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)

以及替换正则表达式:

\1:\2:\*:\*:\*:\6:\*:\*:\*:\*:\*:\*

使用 sed:

sed 's/matching-regularexpression/replacement-regular-expression/' name-of-text-file

根据您的 shell,您可能需要稍微摆弄一下转义字符。

答案2

我可能会用 perl 来做:

perl -pi.bak -e 's/^(\w+\s\w+):\d+:\w+:\w+:\w+:(.*)/$1:$2/' 文件名

相关内容