想知道最快的方法是从列表中的一些分隔字段中删除文本。
我的清单如下:
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/' 文件名