在unix中第二行第N次出现分隔符后需要oneliner插入字符

时间:2015-01-07 02:41:27

标签: linux unix awk sed

你好我需要oneliner在unix中第二行第N次出现分隔符后插入字符;标准是这些。

  1. 查找第n个分隔符的位置。
  2. 在第n次出现后插入字符。
  3. 这只是在第二行。
  4. 注意:我在Linux中这样做。

3 个答案:

答案 0 :(得分:2)

使用

输入文件

1 foo bar base
2 foo bar base

CODE

awk 'NR==2{$2=$2"X"; print}' file
  • 您可以使用-F
  • 指定分隔符
  • NR指定我们处理的行
  • $2是按空格分隔的第2个值(在本例中为
  • $2=$2"X"是串联
  • print单独打印整行

输出

2 fooX bar base

答案 1 :(得分:1)

假设我们有输入文件:

$ cat file
1 foo bar base
2 foo bar base

要在第3次出现分隔符空格后插入字符X,请使用:

$ sed -r '2 s/([^ ]* ){3}/&X/' file
1 foo bar base
2 foo bar Xbase

要对文件进行更改,请使用sed的-i选项:

sed -i -r '2 s/([^ ]* ){3}/&X/' file

如何运作

考虑sed命令:

2 s/([^ ]* ){3}/&X/

初始2指示sed仅将此命令应用于第二行。

我们正在使用s替换命令。此命令的格式为s/old/new/,旧的和新的是:

  • old是正则表达式([^ ]* ){3}。这匹配所有内容,包括第三次出现的空格。

  • new是替换文字&X。 &符号指的是我们在old中匹配的内容,它是第三个空格的所有行。 X是我们要插入的新角色。

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed '2s/X/&Y/3' file

仅在第二行Y出现X之后插入{{1}}。