删除除了第一个和最后6个数字之外的所

时间:2015-04-20 21:57:16

标签: bash sed scripting

我正在尝试删除文件中每行的第一个数字和最后6位数字以外的所有内容。到目前为止,我已使用sed删除了除最后6位数之外的所有内容,如下所示:

sed -r 's/.*(.{6})/\1/' test

我是否有办法修改此项以便保留第一个数字?这个数字可以是任何长度,但总是后跟一个空格。基本上,我想摆脱/home/usr/file并且只保留123456789 123456任何帮助将不胜感激!

输入行:

123455679 /home/usr/file123456

期望的输出:

123456789 123456

3 个答案:

答案 0 :(得分:3)

在开始时做同样的事情。

sed -r 's/(.).*(.{6})/\1\2/' test

(我不知道这有多高效。它可能需要回溯最后一场比赛的长度。)

抓住第一个“字段”(空格分隔)和最后六个可以使用的字符。

sed -r 's/([^[:space:]]*) .*(.{6})/\1 \2/' test

虽然我认为awk解决方案通常是一个更好的主意。

答案 1 :(得分:3)

echo 5 /home/usr/file123456 | awk '{print $1,substr($2,length($2)-5,6)}'

答案 2 :(得分:0)

$ echo '123456789 /home/usr123/file123456' | sed -r 's/ .*(.{6})/ \1/'
123456789 123456