交互式shell或bash脚本来操作文本文件

时间:2015-12-17 13:32:38

标签: bash shell

我有一个包含2列的文本文件(例如下面的代码)

Account_name Device_name
12345 1a3T567890f2

然后需要将Device_name列的值更改为:

  • 如果存在字母,则为大写字母(例如1A3T567890F2

    awk '{ print toupper($0) }' file.txt > file2.txt
    
  • 需要插入冒号符号以将值分隔为2个字符 块(例如1A:3T:56:78:90:F2

    sed 's/\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)/\1:\2:\3:\4:\5:\6/g' file2.txt > file3.txt
    

我想创建一个可以同时执行这两个功能的脚本。

2 个答案:

答案 0 :(得分:0)

您可以在sed的替换表达式的开头添加\U,将以下内容切换为大写:

sed 's/(\w\w)(\w\w)(\w\w)(\w\w)(\w\w)(\w\w)/\U\1:\2:\3:\4:\5:\6/g' file2.txt > file3.txt
  

试运行:

$ echo "1a3T567890f2" | sed -r 's/(\w\w)(\w\w)(\w\w)(\w\w)(\w\w)(\w\w)/\U\1:\2:\3:\4:\5:\6/g'
1A:3T:56:78:90:F2

答案 1 :(得分:0)

您可以在awk中执行所有操作:

awk '{$2=toupper($2);gsub(/[[:alnum:]]{2}/,"&:", $2);sub(/:[[:space:]]*$/,"",$2)}1' file

这更加直观,适用于各种数字。