[英]Replacing patterns with grep and regex
我想知道使用grep和正則表達式我們是否可以本着以下示例的精神做一些事情:
原文:
name_1_extratext
name_2_extratext
目標:
name_extratext_1
name_extratext_2
我對在Vim中執行此操作特別感興趣。 謝謝
@bohemian 關於grep
僅進行匹配的評論也適用於 Vim。“grep”和“regex”不是,也不應該是您在遇到問題時拋出的模糊流行語。 它們是可能會或可能不會適應您遇到的 class 問題的工具,學習的很大一部分是獲得正確的直覺,了解在什么情況下使用什么工具。
在Vim中,你要做的是代入。 它根本不涉及grep
但它肯定涉及正則表達式。
在這種特定情況下,您將執行以下操作:
:%s/\(.*\)\(_\d\+\)\(.*\)/\1\3\2
或@bohemian 答案的這個變體:
:%s/_\([^_]\+\)_\(.*\)/_\2_\1/
或任何對您有用且有意義的東西,真的。 理想情況下不是您從 inte.net 復制/粘貼的內容,而是您真正理解的內容。
參考:
:s
命令在用戶手冊:help 10.2
的第 10 章中介紹,並在:help:s
下進一步記錄。%
范圍也在用戶手冊的第 10 章中介紹: :help 10.3
,並在:help:range
下進一步記錄。:help pattern
下有大量記錄。 grep
不會對其匹配的內容“做”任何事情; 它只匹配。
使用sed
:
echo "name_1_extratext" | sed -E 's/_([^_]+)_(.*)/_\2_\1/'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.