在这种特定情况下如何正确使用“sed”命令

在这种特定情况下如何正确使用“sed”命令

我有一个名称.txt 文件,其中每一行的形式如下:

xxxxxx   random_string_of_characters    2015

其中 xxxxxx 是一个 6 位数字,random_string_of_characters 可以是任何事物。我想使用替换命令替换每行中 xxxxxx 和 2015 之间的所有空白和 random_string_of_characters,以便每个字符串看起来像这样:

xxxxxx 2015

那么,实现这一目标的最佳方法是什么?

答案1

你可以做

sed -i -e 's/[[:space:]]\+.\+2015$/ 2015/' names.txt

如果你想将它保存到同一个文件中。-i如果您只想打印到标准输出,请删除,您可以将其重定向到另一个文件。

它将匹配行尾任意数量的空格,后跟 2015 之前的任何内容,然后将整个匹配项替换为“2015”

另一种可能性是做

sed -e 's/^\([[:digit:]]\{6\}\).\+\([[:digit:]]\{4\}\)$/\1 \2/'  names.txt

它将匹配行首的 6 个数字和行尾的 4 个数字,并打印这些匹配项,并在它们之间留一个空格。它将保持任何其他行不变。

答案2

我的偏好是锚定到字符串的开头以减少回溯,我喜欢扩展的正则表达式,所以我会使用

sed -re 's/^([0-9]{6}) .*( 2015)$/\1\2/' names.txt

这是做什么的

-r extended regexp
-e expression to follow
s substitute
^ beginning of line
( start subpattern
[0-9] a digit
{6} previous occurs exactly six times
) end subexpression
. any single character
* previous occurs zero or more times
$ end of line
\1 first subpattern
\2 second subpattern

相关内容