我需要附加以下列表:
urack-L-
urack-L-
urack-L-
urack-L-
urack-L-
与 urack-L-
urack-L-100
urack-L-101
urack-L-100
urack-L-101
urack-L-100
等等...
除了增量(100,101,102等...)之外,我找不到其他方法。有任何简短而甜蜜的sed技巧吗?
awk:
awk '{printf "%s%d\n", $0, 101 - NR % 2}' file
NR
变量保存当前记录号,默认情况下为当前行号。对于偶数或奇数行,NR % 2
计算结果为 0 或 1。
如果您有 GNU sed,您可以使用地址扩展:
sed '1~2s/$/100/;2~2s/$/101/' infile
其中地址
first~step
与地址 first
的行匹配,然后每第 step
行匹配。
或者,正如 ctac 的评论中指出的:
sed 's/$/100/;n;s/$/101/' infile
这使用
n
命令打印模式空间(包含奇数行)并将下一个(偶数)行加载到其中。这应该适用于任何符合 POSIX 的 sed。
:%s/$/\=(line(".")%2==0?"101":"100")/
% ................ whole file
s ................ substitute
$ ................ end of line
\=(line(".") ..... gets the number of the current line
%2==0? ........... if the rest of division equals zero
参考链接。
这不适合
sed
。只需使用带有您测试的变量的 shell 循环即可。
i=100
while read line
do
echo "$line$i"
if [[ i == 100 ]]
then i=101
else i=100
fi
done < inputfile > outputfile
正则表达式也可以正常工作:
:%s/\(^.*\)\n\(.*\)/\1100\r\2101/g