使用shell脚本编辑文本文件中的列

使用shell脚本编辑文本文件中的列,shell,sed,awk,Shell,Sed,Awk,我有一个文本文件: a b n d f h e f y 我想编辑它,使它像: a b@gmail.com n d f@gmail.com h e f@gmail.com y 我该怎么做?有什么命令可以帮助您吗?试试这个awk单行程序: $ awk '$2=$2"@gmail.com"' file a b@gmail.com n d f@gmail.com h e f@gmail.com y 使用内联sed sed -i.bak 's/\(^[^ ]* *\)\([^ ]*\)\(.*\

我有一个文本文件:

a b n
d f h 
e f y
我想编辑它,使它像:

a b@gmail.com n
d f@gmail.com h 
e f@gmail.com y

我该怎么做?有什么命令可以帮助您吗?

试试这个awk单行程序:

$ awk '$2=$2"@gmail.com"' file
a b@gmail.com n
d f@gmail.com h
e f@gmail.com y

使用内联sed

sed -i.bak 's/\(^[^ ]* *\)\([^ ]*\)\(.*\)$/\1\2@gmail.com\3/' file
这将保存对原始文件本身的更改。

这可能适用于您(GNU-sed):


请解释正则表达式
[^]*
表示匹配空格以外的任何内容,
*
表示任何长度为0或更长的文本。
sed-r的/^\s+\s+/&@gmail.com/”文件
更具可读性和健壮性(GNU-sed)。这不会对原始文件进行更改。它创建一个新文件,然后将其命名为与原始文件相同的名称。如果原始文件有其他链接,这是一个显著的区别。它在
sed
+1的所有实现中都是无效的。有趣的是,有些人会看看这有多简单,sed替代方案有多复杂,然后选择sed命令,因为某些版本的sed支持
-i
。唉。。。。无论如何-较新版本的
gawk
支持
-i inedit
更改原始文件(如果需要)。
sed -i 's/\S\+/&@gmail.com/2' file