shell - 如何使用 sed 将以“/”开头的单词的每一行中的最后一个实例大写?
问题描述
我试图将每个以“/”开头的单词大写,同时使用 sed 忽略不以“/”开头的同一个单词。例如,如果输出有
word1
/word1
我想保持第一个 word1 不变并将第二个 word1 大写成为
word1
/WORD1
如果文件在同一行中有多个 word1,我希望它大写 word1 的最后一个实例,所以
word1 /word1 /word1
会成为
word1 /word1 /WORD1
我已经尝试过sed 's/word1/\U&/'
,但它只是将文件中的每个 word1 大写,我不太确定如何在搜索字符串中包含“/”,因为如果我直接添加它只会引发错误。
解决方案
https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html
“ / 字符可以在任何给定的 s 命令中统一替换为任何其他单个字符。 / 字符(或任何其他用于代替它的字符)只能出现在正则表达式或替换中,前提是它前面有一个 \ 字符。 "
https://www.gnu.org/software/sed/manual/html_node/Regexp-Addresses.html#Regexp-Addresses "/regexp/
This will select any line which matches the regular expression regexp. If regexp itself includes any / characters, each must be escaped by a backslash (\). "
我没有任何使用 sed 的经验,但在我看来,您可以使用正则表达式来具体指定您想要大写的模式。在正则表达式中,您可以使用字符“/”,但您需要使用反斜杠对其进行转义。所以尝试类似的东西
sed 's/word1/\U&/' (我不太确定反斜杠需要放在哪里,但是通过这个和尝试你应该能够用转义的“/”给出你的单词的正则表达式并且只有这个词应该大写。
推荐阅读
- lua - Lua如何从字符串末尾删除“.html”文本
- android - 如何在 Xamarin Forms 中获取设备的 GPS 位置?
- javascript - Cordova Android 权限对话框不会提示
- python - 空格分隔值到 ndarray
- hibernate - 休眠源中缺少包
- tensorflow - tf-slim batch norm:训练/推理模式之间的不同行为
- matlab - 通过在 Matlab 中调用终端命令处理显示的文本信息
- android - 为什么 AOSP 7.1.2 上出现 getpidcon() 错误?
- javascript - 如何在 NodeJS Web 应用程序中存储和访问大文件
- node.js - Graphql 未按预期解决