繁体   English   中英

bash 脚本:如何在 .<dot> 对于文件中的每一行

[英]bash scripting: how to move a string before .<dot> for each line in a file

文件包含:

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

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

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

GNU-sed 解决方案:

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

BSD Sed & GNU 解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM