搜索以短语开头的行并与下一行交换?
Search for line starting with phrase and swap with next line?
假设我有这样一个文件:
Stuff here
TERM here
Other stuff
Stuff here
TERM HERE
Additional stuff
End of stuff
是否有一个 Linux 命令行工具可以找到所有以 TERM
开头的行并将整行与下一行交换,从而产生:
Stuff here
Other stuff
TERM here
Stuff here
Additional stuff
TERM HERE
End of stuff
非常感谢。
您可以将 Vim 非交互地用作 vim -e
或只是 ex
与此命令:
ex filename -u NONE -c 'g/^TERM/del | put' -c 'wq'
解释:
ex filename
: 非交互式编辑 filename
-u NONE
: 不要加载 vimrc 文件。
-c
:运行加载文件后执行以下命令
g
::global
命令。它搜索模式,然后在找到的每个位置执行命令。
/^TERM/
:要搜索的模式。 ^
是匹配行首的特殊字符。 /
s 用于分隔模式。
del
: 删除当前行。
|
:分隔命令。在这种情况下,del
和 put
。两者仍然是 g
命令的一部分。
put
: 将删除的行粘贴到当前行之后。
wq
:将文件写入磁盘并退出。这必须作为一个单独的 -c
参数而不是像 put
那样用 |
分隔,否则它会在只执行第一个匹配行后退出。
假设我有这样一个文件:
Stuff here
TERM here
Other stuff
Stuff here
TERM HERE
Additional stuff
End of stuff
是否有一个 Linux 命令行工具可以找到所有以 TERM
开头的行并将整行与下一行交换,从而产生:
Stuff here
Other stuff
TERM here
Stuff here
Additional stuff
TERM HERE
End of stuff
非常感谢。
您可以将 Vim 非交互地用作 vim -e
或只是 ex
与此命令:
ex filename -u NONE -c 'g/^TERM/del | put' -c 'wq'
解释:
ex filename
: 非交互式编辑filename
-u NONE
: 不要加载 vimrc 文件。-c
:运行加载文件后执行以下命令g
::global
命令。它搜索模式,然后在找到的每个位置执行命令。/^TERM/
:要搜索的模式。^
是匹配行首的特殊字符。/
s 用于分隔模式。del
: 删除当前行。|
:分隔命令。在这种情况下,del
和put
。两者仍然是g
命令的一部分。put
: 将删除的行粘贴到当前行之后。wq
:将文件写入磁盘并退出。这必须作为一个单独的-c
参数而不是像put
那样用|
分隔,否则它会在只执行第一个匹配行后退出。