繁体   English   中英

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

[英]interactive shell or bash script to manipulate a text file

我有一个包含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 

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

您只需在sed的replace表达式的开头添加\\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 

你可以在awk做所有事情:

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

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

暂无
暂无

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

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