如何在bash的每一行N个模式后附加一个字符?

时间:2016-07-18 15:56:23

标签: bash shell awk sed append

如何插入','在第二个角色之后,'在每一行?

我想要以下内容:

input.txt中

a,b,c,d,e
e,f,g,
h,,i

output.txt的

a,b,,c,d,e
e,f,,g
h,,,i

提前致谢

4 个答案:

答案 0 :(得分:3)

awk救援!

$ awk -F, -v OFS=, '{$3=OFS $3}1' file
a,b,,c,d,e
e,f,,g,
h,,,i

在第二个,之后是第三个字段。使用,为第三个字段添加前缀并打印。

或者,将列号作为参数并编写一次分隔符。

$ awk -F, -v c=3 'BEGIN{OFS=FS} {$c=OFS $c}1' file

这可以理解为“在第3位插入新列”。请注意,这也会有效,添加第6列,使用sed很难复制。

$ awk -F, -v c=6 'BEGIN{OFS=FS} {$c=OFS $c}1' file

a,b,c,d,e,,
e,f,g,,,,
h,,i,,,,

答案 1 :(得分:3)

输入

$ cat input 
a,b,c,d,e
e,f,g,
h,,i

使用sed,如:

$ N=2
$ cat input | sed "s/,/&,/${N}"
a,b,,c,d,e
e,f,,g,
h,,,i

$ N=3
$ cat input | sed "s/,/&,/${N}"
a,b,c,,d,e
e,f,g,,
h,,i

你可以改变N.

s/pattern/replacement/flags

替换模式的替换字符串。 替代函数中的标志值为零或以下:

N       Make the substitution only for the N'th occurrence 
g       Make the substitution for all

对于函数s/,/&,/${N},它找到第N个逗号并用两个逗号替换它(替换中出现的&符号(&)被模式字符串替换)。 $ {N}只是一个变量。

顺便说一句,如果要插入“

,则需要转义特殊字符双引号

答案 2 :(得分:2)

使用sed

sed -E 's/^([^,]*,[^,]*,)(.*)/\1,\2/' file.txt

示例:

% cat file.txt
a,b,c,d,e
e,f,g,
h,,i

% sed -E 's/^([^,]*,[^,]*,)(.*)/\1,\2/' file.txt
a,b,,c,d,e
e,f,,g,
h,,,i

答案 3 :(得分:0)

您可以像这样使用sed

sed 's/^[^,]*,[^,]*/&,/' file

a,b,,c,d,e
e,f,,g,
h,,,i