我正在尝试对上述链接进行反向操作。
我想将某个字符或单词后的所有内容大写。
可以使用 awk、sed 或 bash
例子
前
foo^bar
foobar ^ foobar
后
foo^BAR
foobar ^ FOOBAR
谢谢
答案1
使用 sed:
sed 's/\^.*/\U&/' file
(^
被转义,以删除其作为行首锚点的特殊含义;您也可以使用[^]
)
或 awk
awk -F^ 'BEGIN{OFS=FS} {x=$1; $0=toupper($0); $1=x} 1' file
(存储第一个^
以 - 分隔的字段;将整行更改为大写;然后替换原来的第一个字段)。
答案2
使用普通的 bash,我们需要几个额外的变量:
for line in 'foo^bar' 'foobar ^ foobar' 'a^b^c'; do
prefix=${line%%^*}
suffix=${line#*^}
caps="${prefix}^${suffix^^}"
printf '%s ==> %s\n' "$line" "$caps"
done
foo^bar ==> foo^BAR
foobar ^ foobar ==> foobar ^ FOOBAR
a^b^c ==> a^B^C
${var%%pattern}
-> 从末尾删除与模式匹配的最长子字符串${var#pattern}
-> 从开头删除与模式匹配的最短子字符串${var^^}
-> 大写