重新安排符合条件的字段的智能,简洁/简洁方法是什么?就我的目的而言,记录可以是用空行分隔的块,例如:
apple
banana
12345
carrot
donut
98765
eggplant
或制表符分隔,例如,
apple banana 12345 carrot
donut 98765 eggplant
在任何一种情况下,假设我正在寻找模式/[0-9]{5}/
。如果匹配,我想将其移动到第一条记录。这将产生以下结果:
12345
apple
banana
carrot
98765
donut
eggplant
或制表符分隔,例如,
12345 apple banana carrot
98765 donut eggplant
无需支持这两种格式。它们对我来说是可以互换的。
单线优先。
答案 0 :(得分:1)
awk 'function out() {if (x) {print x; x="";}}
NF==0 {out(); print; next}
/^[0-9]{5}$/ {print; out(); next}
{x=x?(x RS $0):$0}
END {out()}'
答案 1 :(得分:1)
对于全部一线版本,请尝试(未经测试):
{{1}}
假设您只想移动5位数字,而不是包含 5位数字。
答案 2 :(得分:0)
对于你的第一个例子,一个可以工作的衬里将是:
perl -00 -pe "s/\A(.*?)^(\d{5}\n)/$2$1/sm" j1.txt
要在unix系统上运行,请用单引号替换双引号。
更新:对正则表达式进行了2次更改。