我有一个以 2 个数字、一个破折号、2 个数字和一个空格开头的条目列表。例如(注意数字后面的空格):
87-17
Run Code Online (Sandbox Code Playgroud)
我需要将上面的更改为87-17<tab>
(其中<tab>
代表实际的制表符)。我不知道怎么写出来。我知道这很简单,但我对 Linux 一点也不熟悉,我只是一个卑微的平面设计师......
你可以使用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
数字的简写。