bash脚本:如何在文件中的每一行之前移动字符串。<dot>

时间:2017-09-25 20:07:37

标签: linux bash

文件包含:

compat-db.x86_64                      4.6.21-17.el6                          
chkconfig.x86_64                      1.3.49.5-1.el6

我想在-之前添加前缀4.6.21-17.el6,并使用bash脚本在.之前移动它。

所以输出应该是:

compat-db-4.6.21-17.el6.x86_64
chkconfig-1.3.49.5-1.el6.x86_64

有任何建议如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

awk 解决方案:

awk '{ sub(/\./,"-"$2".",$1); print $1 }' file

输出:

compat-db-4.6.21-17.el6.x86_64
chkconfig-1.3.49.5-1.el6.x86_64

答案 1 :(得分:0)

GNU-sed解决方案:

sed 's/\.\(.*\)[[:space:]]\+\(.*\)/-\2.\1/'
  • \.按字面匹配
  • [:space:]是一个POSIX类,在字符类中,它匹配任何空格字符
  • \+表示“至少一次”
  • \(...\)用于捕获

答案 2 :(得分:0)

BSD Sed&amp; GNU解决方案:

sed -E 's!^([^\s\.]*)(\.[a-Z0-9_^\s]*)[\s]*([^\s]*)[\s]*$!\1-\3\2!g;s! !!g' < yourfile.txt