Bash 如何将:添加到文件中的一行

Bash 如何将:添加到文件中的一行,bash,Bash,我有一个包含多行的文件,但我想添加:以隔开部分。例如我有 Last Name First Name User ID email Smith John 123456789 johnsmith@gmail.com 我只想在第一行中加上四类信息,比如 Last Name : First Name : User ID : email Smith John 123456789 johnsmith@gmail.com 我知道你可以直接编辑文件,但那太简单了。有没有一种更有效的方法可以用一行代码来实现这一

我有一个包含多行的文件,但我想添加:以隔开部分。例如我有

Last Name First Name User ID email
Smith John 123456789 johnsmith@gmail.com
我只想在第一行中加上四类信息,比如

Last Name : First Name : User ID : email
Smith John 123456789 johnsmith@gmail.com

我知道你可以直接编辑文件,但那太简单了。有没有一种更有效的方法可以用一行代码来实现这一点?

要将冒号添加到第一行,并且只添加到第一行:

$ sed -r '1 s/([^ ]+ ){2}/&: /g' file
Last Name : First Name : User ID : email
Smith John 123456789 johnsmith@gmail.com
要进行这些更改并将文件保存到位,请使用sed的
-i
选项

sed -ir '1 s/([^ ]+ ){2}/&: /g' file
工作原理
  • -r

    这将选择扩展正则表达式语法

  • 1s/([^]+){2}/&:/g

    开头的
    1
    选择第1行。替换命令的形式为
    s/old/new/
    ,其中
    old
    下面是两个单词和空格:
    ([^]+){2}
    新的
    这里是匹配的,
    ,后跟冒号和空格。最后一个
    g
    命令sed在线重复执行此操作

Mac OSX或其他BSD系统 使用BSD sed,请尝试:

sed -i '' -E '1 s/([^ ][^ ]* ){2}/&: /g' file

谢谢你,约翰。我将在5分钟内接受答案,这是我一直在努力有效地完成的。如果我想偶然将它们添加到整个文件中,该怎么办?@MarcusBurkhart删除
1
,替换将应用于所有行: