shell - 将文本从 HttpStatus.NOT_FOUND 转换为 bash 中的 status().isNotFound()
问题描述
我想将 bash 变量中的文本转换HttpStatus.NOT_FOUND
为status().isNotFound()
,我已经通过使用sed
:
result=HttpStatus.NOT_FOUND
result=$(echo $result | cut -d'.' -f2- | sed -r 's/(^|_)([A-Z])/\L\2/g' | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g')
echo "status().is$result()"
输出:
status().isNotFound()
正如你在这里看到的,我使用了 2 个sed
命令。
有没有办法使用 1sed
或任何其他更简单的方法来实现相同的结果?
解决方案
由于替换部分涉及大量新的文本插入,因此sed
可以将命令详细编写如下。只需通过管道传递变量内容而不使用cut
result=HttpStatus.NOT_FOUND
echo "$result" |
sed -E 's/^.*(Status)\.([[:upper:]])([[:upper:]]+)_([[:upper:]])([[:upper:]]+)$/\L\1().is\u\2\L\3\u\4\L\5()/g'
sed
这个想法是在捕获的组上添加 GNU 的大小写转换功能。所以我们捕捉
(Status)
其中\1
我们只是将整个字符串小写,然后将 a 添加().is
到结果中- 下一个捕获的组
\2
将是后面的第一个大写字符.
which would be和字符串的N
其余部分。我们保留第二个,并做第三组的小写。OT
\3
FOUND
和中的下一个单词重复\4
与上述相同的顺序\5
。- ,是 GNU 中可用的大小写转换运算
\L
符。\u
sed
如果您只想修改.
CamelCase 之外的部分,那么您可以使用sed
as
result=HttpStatus.NOT_FOUND
result=$(echo "$result" |
sed -E 's/^.*\.([[:upper:]])([[:upper:]]+)_([[:upper:]])([[:upper:]]+)/\u\1\L\2\u\3\L\4/g')
echo "status().is$result()"
推荐阅读
- typescript - 如何在带有 TypeScript 的构造函数中使用它?
- node.js - 错误:Fontconfig 警告:忽略 UTF-8:不是有效的区域标签
- laravel - 在 Laravel 中使用 Vue 插件时出错:未知的自定义元素:
- ruby - ruby equal 方法总是返回参数值而不是返回值
- mysql - 为派生表选择数据时出现未知列错误
- r - igraph 对象的可变部分是什么?
- excel - 如果两个单元格匹配第三个单元格的返回值
- python - 使用来自其他数据集的 VLOOKUP 更改 pandas 中的列名
- react-native - 找不到模块:错误:无法解析“react-native/Libraries/Image/resolveAssetSource”
- c# - 如何在 C# 中对 nvarchar 列进行排序