我有一个字符串通过管道传递到此bash命令:sed -n '/^[*] / { s/^[*] \(.*\)/\1/; s,/,:,; s/-/ /g; p; }'
。该字符串将始终采用以下格式:XYZ-1234/a-string-of-words-separated-by-dashes
。但是,此解决方案将删除匹配的第一个破折号,并且在冒号后不添加空格。如何调整此值,以使输出为:XYZ-1234: A string of words separated by dashes
。还要注意冒号大写后的第一个字符。
答案 0 :(得分:1)
您可以像这样使用awk
:
awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' file > newfile
详细信息
-F'/'
-字段分隔符设置为/
/^[*] /
-查找以*
和空格开头的所有行m=$1;n=$2;
-字段1分配给m
,字段2值分配给n
gsub(/^[*] /, "", m);
-删除开头的"* "
gsub(/-/, " ", n);
-用-
中的空格替换所有n
print m": "toupper(substr(n,1,1)) substr(n, 2)}'
-打印结果:将m
值,:
和空格,然后将n
值与大写字母连接起来。请参见online demo:
s="* XYZ-1234/a-string-of-words-separated-by-dashes"
awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' <<< "$s"
# => XYZ-1234: A string of words separated by dashes