簡體   English   中英

如何使用 sed 將以“/”開頭的單詞的每一行中的最后一個實例大寫?

[英]How do I use sed to capitalize the last instance in each line of a word that starts with “/”?

我正在嘗試使用 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&/'(我不太確定需要將反斜杠放在哪里,但是通過這個和嘗試,您應該能夠在之前使用轉義的“/”給出單詞的正則表達式並且只有這個詞應該大寫。

https://ideone.com/htALOt可以看出——

sed -Ee 's@(.*)(/word1)@\1\U\2@'

(.*)從頭開始盡可能匹配,當遇到\\1時會原樣復制。 \\U告訴 GNU sed開始以全大寫形式進行替換,然后\\2以全大寫形式寫入該內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM