如何追加在一个VI文件中的每一行的末尾一些命令的输出?(How to append some com

2019-10-19 08:06发布

假设我有一个VI文件,如下所示:

猫文件1

abc 123 pqr
lmn 234 rst
jkl 100 mon

我想利用每一行的第二场(即,在这种情况下是123,234和100),并将其附加到这条线上的结束。 我将如何做呢?

输出应该如下所示:

abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100

Answer 1:

随着awk

$ awk '{NF=NF+1; $NF=$2}1' file
abc 123 pqr 123
lmn 234 rst 234
jkl 100 mon 100

它增加字段的一个数,并设置最后一个作为第二。 然后1是一个真正的条件,这被评价为默认的awk行为: {print $0}

或者也

awk '{print $0, $2}' file

它打印的全线加上第二场。

或者更短, 感谢哈康Hægland! :

awk '{$(NF+1)=$2}1' file


Answer 2:

你有很多方法可以做到,在六(M)。 这是在我脑海中最简单的:

:%norm 0f<space>yaw$p

说明:

  • :{range}norm command执行正常模式command在每行中{range}
  • %是一条捷径范围,意思是“缓冲区中的所有行”,所以我们将在缓冲区执行每行上下文
  • 0把光标在第一列上的电流线(不是绝对必要的,但良好的做法)
  • f<space>跳跃在第一光标<space>光标在当前行之后
  • yaw猛拉的字和<space>光标下
  • $跳到一行的末尾
  • p粘贴先前抽出的文本


Answer 3:

与标记提示,你可以在vi做

:%s/\( [^ ]*\)\(.*\)/\1\2\1/

另一种方法,使用的sed

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


文章来源: How to append some command output at the end of each line in a Vi file?
标签: shell unix vim awk vi