如何将 fish shell 中的字符串大写?
How to capitalize string in fish shell?
我收到以下文字:
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
我想大写,即每个单词的首字母大写。
预期结果
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
Bash相当于
使用bash,我使用的是参数扩展:
function to-lower() { echo "$@" |tr '[:upper:]' '[:lower:]' ; }
function capitalize() {
input="$(to-lower "$@")"
for i in $input; do
cap=$(echo -n "${i:0:1}" | tr "[:lower:]" "[:upper:]")
echo -n "${cap}${i:1} "
done
echo
}
问题
如何在鱼道中做到这一点?
function title_case -a string
echo $string | sed 's/\<[[:alpha:]]/\u&/g'
end
title_case 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
使用外部工具的解决方案(来自commandlinefu)
function capitalize
set input "$argv"
echo "$input" | tr '[A-Z]' '[a-z]' | sed 's/\(^\| \)\([a-z]\)/\u/g'
end
用法
capitalize "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
Fish 目前没有任何工具可以执行此操作(在发行版中),因此假设您有 GNU sed,您可以执行此操作:
function capitalize
echo $argv | sed 's/[^ _-]*/\u&/g'
end
还有很多其他的工具,你也可以用例如python 或通过从 fish 调用 bash,关键是没有办法提取子字符串或用 fish 内置函数替换字符。
在下一个鱼发布中,您将可以使用string sub -l 1 $i
提取第一个字符。
None 以前的解决方案对我有用。 sed
似乎在我的机器上运行不佳。如果有人遇到任何类似的问题,这是我最终使用的解决方法:
function title_case -a string
set -l matches (string match -r -a '\b[a-z]' $string)
for match in $matches
set -l upper (echo $match | tr a-z A-Z)
set string (echo (string replace -r '\b[a-z]' $upper $string))
end
echo $string
end
仅适用于 fish 2.3.0 或更新的 版本,因为我使用的是 string
内置
我收到以下文字:
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
我想大写,即每个单词的首字母大写。
预期结果
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
Bash相当于
使用bash,我使用的是参数扩展:
function to-lower() { echo "$@" |tr '[:upper:]' '[:lower:]' ; }
function capitalize() {
input="$(to-lower "$@")"
for i in $input; do
cap=$(echo -n "${i:0:1}" | tr "[:lower:]" "[:upper:]")
echo -n "${cap}${i:1} "
done
echo
}
问题
如何在鱼道中做到这一点?
function title_case -a string
echo $string | sed 's/\<[[:alpha:]]/\u&/g'
end
title_case 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
使用外部工具的解决方案(来自commandlinefu)
function capitalize
set input "$argv"
echo "$input" | tr '[A-Z]' '[a-z]' | sed 's/\(^\| \)\([a-z]\)/\u/g'
end
用法
capitalize "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
Lorem Ipsum Dolor Sit Amet, Consectetur Adipisicing Elit.
Fish 目前没有任何工具可以执行此操作(在发行版中),因此假设您有 GNU sed,您可以执行此操作:
function capitalize
echo $argv | sed 's/[^ _-]*/\u&/g'
end
还有很多其他的工具,你也可以用例如python 或通过从 fish 调用 bash,关键是没有办法提取子字符串或用 fish 内置函数替换字符。
在下一个鱼发布中,您将可以使用string sub -l 1 $i
提取第一个字符。
None 以前的解决方案对我有用。 sed
似乎在我的机器上运行不佳。如果有人遇到任何类似的问题,这是我最终使用的解决方法:
function title_case -a string
set -l matches (string match -r -a '\b[a-z]' $string)
for match in $matches
set -l upper (echo $match | tr a-z A-Z)
set string (echo (string replace -r '\b[a-z]' $upper $string))
end
echo $string
end
仅适用于 fish 2.3.0 或更新的 版本,因为我使用的是 string
内置