我有一个包含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
我想创建一个可以同时执行这两个功能的脚本。
答案 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
这更加直观,适用于各种数字。