2016-08-09 25 views
-2

我有很多具有線是通過以下方式文件:替換>用「sed的正則表達式

#include "3rd-party/*lots folders*> 

的問題是,它與>代替"

是到此爲止一個快速的正則表達式sed的改動?

基本上,如果符合#include "3rd-party開始,就應更換的最後一個字符來"

在此先感謝

回答

2

基本上,你可以使用:

sed '/^[[:space:]]*#include "3rd-party/s/>[[:space:]]*$/"/' file 

說明:

  • /^[[:space:]]*#include/是一個地址,一個正則表達式的地址。隨後的命令將應用於啓動哪個可選空間後跟#include語句的行。
  • s/>[[:space:]]*$/"/替換>,然後是可選空間和行末尾"

如果要更改文件到位使用-i選項:

sed -i '/^[[:space:]]*#include/s/>[[:space:]]*$/"/' file 

在一堆,讓我們說C文件,請使用find,它的-exec選項:

find . -name '*.c' -exec sed -i '/^[[:space:]]*#include/s/[[:space:]]*$/"/' {} \; 
3

您可以使用th是:

sed -i '' '/^[[:blank:]]*#include "3rd-party/s/>$/"/' file 

#include "3rd-party/*lots folders*" 
+0

'[[:blank:]]'不是'sed'理解的字符類。 – hek2mgl

+3

這是不正確的,我用OSX'sed'和'gnu sed'測試過它,它工作。 – anubhava

+0

然後它是一個隱藏的「功能」。在手冊頁之後,它應該是'[[:space:]]' – hek2mgl

0

您可以使用sed

sed '/search_pattern/{action}' your_file 

你想要做的是與>$其中>替換一行的最後cahracter行動在這條線搜索的模式,做一個動作是你想要的字符,並且$表示搜索到的字符必須放在一行的末尾。

這樣做的動作是sed命令s///,其工作就像s/search_pattern/replace_pattern/

這看起來對你的目標,如:

sed '/#include "3rd-party/{s/>$/"/}' your_file 

但由於sed是一個(或多個)tream(ED)itor你必須使用的sed的命令標誌-i>在線進行更改或管道它一個新文件。

像這樣

sed -i '/#include "3rd-party/{s/>$/"/}' your_file 

或類似這樣的

sed '/#include "3rd-party/{s/>$/"/}' your_file > new_file 

請讓我知道,如果這樣做的工作。