centos SED命令,用于在出现字符后替换字符串

svujldwt  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(122)

我正在尝试运行sed的以下命令:

echo "fOO:paSS,tesT2:fail,TESt:pasS,fdfdhfd:pass,test5:anyresult test,test6:pass asfas " | sed  's/:.*/\L&/;s/\w\+/\u&/g;s/:/ # /g;y/,/\n/' | sed 's/\w\+/&\n/2;P;d'

我得到的输出是:

FOO # Pass
TesT2 # Fail
Test # Pass
Fdfdhfd # Pass
Test5 # Anyresult
Test6 # Pass

所需输出:

fOO # Pass
tesT2 # Fail
TESt # Pass
fdfdhfd # Pass
test5 # anyresult
test6 # Pass

我想要的是:
1.“Pass”和“fail”应始终具有“P“和“F“大写字母,无论给定的输入是什么。
1.“Test”的名称应与echo命令中提供的名称相同,不应更改。
1.在#之前和之后,应仅显示第一个单词。如果用户输入“Test5:成功通过”,则不应打印successfully
可选要求:

  • 我们能把它转换成一个2列和'n'行的表格吗?
iqjalb3h

iqjalb3h1#

我不禁想,这一定是一个更容易与Awk。

awk BEGIN { RS=','; FS=':' }
NF > 2 { print $1 " # " (tolower($2)s~ /^(test/fail)$/ ? toupper(substr($2, 1, 1)) tolower(substr($2, 2)) : $2) }'
f1tvaqid

f1tvaqid2#

1.使用sedtrcut来匹配所描述的输出规格(而不是OP中不一致的所需输出):

echo "fOO:paSS,tesT2:fail,TESt:pasS,fdfdhfd:pass,test5:anyresult test,test6:pass asfas " | 
   tr ',' '\n' | 
   sed 's/:[fp]/\U&/;s/:/ # /;s/...$/\L&/' | 
   cut -d ' ' -f '1-3'

输出量:

fOO # Pass
  tesT2 # Fail
  TESt # Pass
  fdfdhfd # Pass
  test5 # anyresult
  test6 # Pass

1.两列变量输出:

echo "fOO:paSS,tesT2:fail,TESt:pasS,fdfdhfd:pass,test5:anyresult test,test6:pass asfas " |
   tr ',' '\n' | 
   sed 's/:[fp]/\U&/;s/:/\t/;s/...$/\L&/' | 
   cut -d ' ' -f 1

输出量:

fOO Pass
tesT2   Fail
TESt    Pass
fdfdhfd Pass
test5   anyresult
test6   Pass

相关问题