我有一个这样的txt文件
AAAAAAAAAA
BBBBBBBBBB
CCCCCCCC
DDDDDDDDDDD
EEEEEEEEEEE
FFFFFFFFFFF
GGGGGGGGGGG
HHHHHHHHHHH
IIIIIIIIIII
每组 3 行,中间有换行符。
我想反转每组的前两行,使文件像这样
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC
EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF
HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII
我该如何从终端做到这一点?
编辑:如果您需要针对它测试您的答案,我已将我的文本文件示例上传到此处。
一种方法 - 使用 GNU awk:
由于它是固定格式,因此请相应地使用模运算符
和一个
perl
有趣的正则表达式版本-00
段落模式,类似于awk的-v RS=
(\N+\n)((?1))
- 如果需要重复复杂的正则表达式很有用解释
它
sed
有两个操作空间——保持空间和模式空间。它们就像两个变量 -var_1
和var_2
. 每个输入行都进入模式空间,但您可以复制(它替换保留空间的所有内容)或将其附加到保留空间。因此:h
- 将模式空间复制到保持空间。现在,模式和保持空间都是:AAAAA
.n
- 获取模式空间的下一行输入。所以,模式空间现在是:BBBBB
.G
- 将换行符和保持空间 (AAAAA
) 的内容添加到模式空间,因此模式空间现在是BBBBB\nAAAAA
.N
- 将换行符和下一行输入附加到模式空间 -BBBBB\nAAAAA\nCCCCC
p
- 打印模式空间。n
- 获取模式空间的下一行输入,如果它存在,否则退出(如果到达文件末尾)。p
- 再次打印模式空间。输出