簡體   English   中英

用 grep 和正則表達式替換模式

[英]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下進一步記錄。
  • Vim 自己的正則表達式方言在:help pattern下有大量記錄。

grep不會對其匹配的內容“做”任何事情; 它只匹配。

使用sed

echo "name_1_extratext" | sed -E 's/_([^_]+)_(.*)/_\2_\1/'

暫無
暫無

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

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