如何将##-## 空间更改为##-## 选项卡?

des*_*ind 2 text-processing

我有一个以 2 个数字、一个破折号、2 个数字和一个空格开头的条目列表。例如(注意数字后面的空格):

87-17 
Run Code Online (Sandbox Code Playgroud)

我需要将上面的更改为87-17<tab>(其中<tab>代表实际的制表符)。我不知道怎么写出来。我知道这很简单,但我对 Linux 一点也不熟悉,我只是一个卑微的平面设计师......

ter*_*don 6

你可以使用sed

sed -ir 's/^([0-9]{2}-[0-9]{2}) /\1\t/' file
Run Code Online (Sandbox Code Playgroud)

解释

sed是一个“流编辑器”。将其视为一种主要用于编辑文本的简单编程语言。该-i选项可让您就地编辑文件。在没有第-i一个的情况下运行命令以确保它产生所需的结果(文件将保持不变),然后运行它-i以保留更改。在-r启用扩展规律扩展,在这种情况下,简化了格式。

s/foo/bar/是“替代操作”。它将用 替换foo每一行上的第一个实例bar。在这里,我们给它提供了一个正则表达式,意思是“匹配行首 ( ^),然后是两位数字 ( [0-9]{2}),一个减号-,另外两位数字,然后是一个空格。因为这个模式在括号内,所以它被“捕获”并作为 可用\1。因此,该命令会将其替换为它自己,后跟一个制表符 ( \t)。

或者perl

perl -i -pe 's/(\d{2}-\d{2}) /\1\t/' file
Run Code Online (Sandbox Code Playgroud)

解释

这与sed上面的非常相似,但使用的perl是另一种脚本语言。将-i具有与它相同功能sed。该-p手段“将给予脚本后打印每行-e吧。

替换运算符再次相同,只是在这里我们可以使用\d数字的简写。